Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+šŸ–±ļøto focus. On Mac, use Cmdinstead of Ctrl.
import SSA.Core.WellTypedFramework
import SSA.Core.Tactic
import SSA.Projects.InstCombine.Base
import SSA.Projects.InstCombine.AliveStatements
import SSA.Projects.InstCombine.Tactic

open SSA InstCombine EDSL Bitvec


-- Name:AddSub:1043
-- precondition: true
/-
  %Y = and %Z, C1
  %X = xor %Y, C1
  %LHS = add %X, 1
  %r = add %LHS, %RHS

=>
  %or = or %Z, ~C1
  %Y = and %Z, C1
  %X = xor %Y, C1
  %LHS = add %X, 1
  %r = sub %RHS, %or

-/
theorem 
alive_AddSub_1043: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (C1 Z RHS : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Z) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const RHS) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Z) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.not w) Context.Var.last TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.op (Op.const RHS) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) TSSA.rgn0) (TSSA.assign 14 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 15 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e
alive_AddSub_1043
: forall (w :
Nat: Type
Nat
) (
C1: Bitvec w
C1
Z: Bitvec w
Z
RHS: Bitvec w
RHS
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2439
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
Z: Bitvec w
Z
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v4 %v2; %v6 := op:xor w %v5; %v7 := op:const (
1: ?m.3555
1
) %v0; %v8 := pair:%v6 %v7; %v9 := op:add w %v8; %v10 := op:const (
RHS: Bitvec w
RHS
) %v0; %v11 := pair:%v9 %v10; %v12 := op:add w %v11 dsl_ret %v12 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2439
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
Z: Bitvec w
Z
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := op:not w %v2; %v4 := pair:%v1 %v3; %v5 := op:or w %v4; %v6 := pair:%v1 %v2; %v7 := op:and w %v6; %v8 := pair:%v7 %v2; %v9 := op:xor w %v8; %v10 := op:const (
1: ?m.6470
1
) %v0; %v11 := pair:%v9 %v10; %v12 := op:add w %v11; %v13 := op:const (
RHS: Bitvec w
RHS
) %v0; %v14 := pair:%v13 %v5; %v15 := op:sub w %v14 dsl_ret %v15 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (C1 Z RHS : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Z) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const RHS) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Z) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.not w) Context.Var.last TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.op (Op.const RHS) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) TSSA.rgn0) (TSSA.assign 14 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 15 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (C1 Z RHS : Bitvec w), eval (Op.add w) (eval (Op.add w) (eval (Op.xor w) (eval (Op.and w) (eval (Op.const Z) () id, eval (Op.const C1) () id) id, eval (Op.const C1) () id) id, eval (Op.const 1) () id) id, eval (Op.const RHS) () id) id āŠ‘ eval (Op.sub w) (eval (Op.const RHS) () id, eval (Op.or w) (eval (Op.const Z) () id, eval (Op.not w) (eval (Op.const C1) () id) id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (C1 Z RHS : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Z) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const RHS) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Z) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.not w) Context.Var.last TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.op (Op.const RHS) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) TSSA.rgn0) (TSSA.assign 14 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 15 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (C1 Z RHS : Bitvec w), (Z &&& C1 ^^^ C1) + 1 + RHS = RHS - (Z ||| ~~~C1)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (C1 Z RHS : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Z) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const RHS) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Z) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.not w) Context.Var.last TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.op (Op.const RHS) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) TSSA.rgn0) (TSSA.assign 14 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 15 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1152 -- precondition: true /- %r = add i1 %x, %y => %r = xor %x, %y -/ theorem
alive_AddSub_1152: āˆ€ {c : Context BaseType} {e : EnvC c} (y x : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_AddSub_1152
: forall (
y: Bitvec 1
y
x: Bitvec 1
x
:
Bitvec: ā„• → Type
Bitvec
1: ?m.64038
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.64028
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.64051
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec 1
x
) %v0; %v2 := op:const (
y: Bitvec 1
y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add
1: ?m.64489
1
%v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.64028
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.64904
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec 1
x
) %v0; %v2 := op:const (
y: Bitvec 1
y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor
1: ?m.65341
1
%v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), eval (Op.add 1) (eval (Op.const x) () id, eval (Op.const y) () id) id āŠ‘ eval (Op.xor 1) (eval (Op.const x) () id, eval (Op.const y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), x + y = x ^^^ y
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1156 -- precondition: true /- %a = add %b, %b => %a = shl %b, 1 -/ theorem
alive_AddSub_1156: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.pair Context.Var.last Context.Var.last) (TSSA.assign 3 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_AddSub_1156
: forall (w :
Nat: Type
Nat
) (
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.76965
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
b: Bitvec w
b
) %v0; %v2 := pair:%v1 %v1; %v3 := op:add w %v2 dsl_ret %v3 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.76965
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
b: Bitvec w
b
) %v0; %v2 := op:const (
1: ?m.77833
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.pair Context.Var.last Context.Var.last) (TSSA.assign 3 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (b : Bitvec w), eval (Op.add w) (eval (Op.const b) () id, eval (Op.const b) () id) id āŠ‘ eval (Op.shl w) (eval (Op.const b) () id, eval (Op.const 1) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.pair Context.Var.last Context.Var.last) (TSSA.assign 3 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (b : Bitvec w), b + b = b <<< 1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.pair Context.Var.last Context.Var.last) (TSSA.assign 3 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1164 -- precondition: true /- %na = sub 0, %a %c = add %na, %b => %na = sub 0, %a %c = sub %b, %a -/ theorem
alive_AddSub_1164: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_AddSub_1164
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.93532
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.93646
0
) %v0; %v2 := op:const (
a: Bitvec w
a
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := pair:%v4 %v5; %v7 := op:add w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.93532
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.95028
0
) %v0; %v2 := op:const (
a: Bitvec w
a
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := pair:%v5 %v2; %v7 := op:sub w %v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.add w) (eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const a) () id) id, eval (Op.const b) () id) id āŠ‘ eval (Op.sub w) (eval (Op.const b) () id, eval (Op.const a) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), 0 - a + b = b - a
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1165 -- precondition: true /- %na = sub 0, %a %nb = sub 0, %b %c = add %na, %nb => %ab = add %a, %b %na = sub 0, %a %nb = sub 0, %b %c = sub 0, %ab -/ theorem
alive_AddSub_1165: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 10 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 13 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
alive_AddSub_1165
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.120089
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.120203
0
) %v0; %v2 := op:const (
a: Bitvec w
a
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
0: ?m.120865
0
) %v0; %v6 := op:const (
b: Bitvec w
b
) %v0; %v7 := pair:%v5 %v6; %v8 := op:sub w %v7; %v9 := pair:%v4 %v8; %v10 := op:add w %v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.120089
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (
0: ?m.122702
0
) %v0; %v6 := pair:%v5 %v1; %v7 := op:sub w %v6; %v8 := op:const (
0: ?m.123253
0
) %v0; %v9 := pair:%v8 %v2; %v10 := op:sub w %v9; %v11 := op:const (
0: ?m.123832
0
) %v0; %v12 := pair:%v11 %v4; %v13 := op:sub w %v12 dsl_ret %v13 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 10 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 13 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.add w) (eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const a) () id) id, eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.add w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 10 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 13 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), 0 - a + (0 - b) = 0 - (a + b)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 10 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 13 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1176 -- precondition: true /- %nb = sub 0, %b %c = add %a, %nb => %nb = sub 0, %b %c = sub %a, %b -/ theorem
alive_AddSub_1176: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_AddSub_1176
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.161895
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.162009
0
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
a: Bitvec w
a
) %v0; %v6 := pair:%v5 %v4; %v7 := op:add w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.161895
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.163391
0
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
a: Bitvec w
a
) %v0; %v6 := pair:%v5 %v2; %v7 := op:sub w %v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.add w) (eval (Op.const a) () id, eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.sub w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), a + (0 - b) = a - b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1202 -- precondition: true /- %nx = xor %x, -1 %r = add %nx, C => %nx = xor %x, -1 %r = sub (C - 1), %x -/ theorem
alive_AddSub_1202: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
alive_AddSub_1202
: forall (w :
Nat: Type
Nat
) (
x: Bitvec w
x
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.188993
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.189249
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v4 %v5; %v7 := op:add w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.188993
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.190637
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := op:const (
1: ?m.191349
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:sub w %v7; %v9 := pair:%v8 %v1; %v10 := op:sub w %v9 dsl_ret %v10 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), eval (Op.add w) (eval (Op.xor w) (eval (Op.const x) () id, eval (Op.const (-1)) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.sub w) (eval (Op.sub w) (eval (Op.const C) () id, eval (Op.const 1) () id) id, eval (Op.const x) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), (x ^^^ -1) + C = C - 1 - x
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1295 -- precondition: true /- %aab = and %a, %b %aob = xor %a, %b %c = add %aab, %aob => %aab = and %a, %b %aob = xor %a, %b %c = or %a, %b -/ theorem
alive_AddSub_1295: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AddSub_1295
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.222919
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:xor w %v5; %v7 := pair:%v4 %v6; %v8 := op:add w %v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.222919
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:xor w %v5; %v7 := pair:%v1 %v2; %v8 := op:or w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.add w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), (a &&& b) + (a ^^^ b) = a ||| b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1309 -- precondition: true /- %lhs = and %a, %b %rhs = or %a, %b %c = add %lhs, %rhs => %lhs = and %a, %b %rhs = or %a, %b %c = add %a, %b -/ theorem
alive_AddSub_1309: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AddSub_1309
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.249121
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:or w %v5; %v7 := pair:%v4 %v6; %v8 := op:add w %v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.249121
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:or w %v5; %v7 := pair:%v1 %v2; %v8 := op:add w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.add w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.or w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.add w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), (a &&& b) + (a ||| b) = a + b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1539 -- precondition: true /- %na = sub 0, %a %r = sub %x, %na => %na = sub 0, %a %r = add %x, %a -/ theorem
alive_AddSub_1539: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_AddSub_1539
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
x: Bitvec w
x
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.275044
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.275158
0
) %v0; %v2 := op:const (
a: Bitvec w
a
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
x: Bitvec w
x
) %v0; %v6 := pair:%v5 %v4; %v7 := op:sub w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.275044
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.276540
0
) %v0; %v2 := op:const (
a: Bitvec w
a
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
x: Bitvec w
x
) %v0; %v6 := pair:%v5 %v2; %v7 := op:add w %v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a x : Bitvec w), eval (Op.sub w) (eval (Op.const x) () id, eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const a) () id) id) id āŠ‘ eval (Op.add w) (eval (Op.const x) () id, eval (Op.const a) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a x : Bitvec w), x - (0 - a) = x + a
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1539-2 -- precondition: true /- %r = sub %x, C => %r = add %x, -C -/ theorem
alive_AddSub_1539_2: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.neg w) Context.Var.last TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e
alive_AddSub_1539_2
: forall (w :
Nat: Type
Nat
) (
x: Bitvec w
x
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.300567
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.300567
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := op:neg w %v2; %v4 := pair:%v1 %v3; %v5 := op:add w %v4 dsl_ret %v5 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.neg w) Context.Var.last TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), eval (Op.sub w) (eval (Op.const x) () id, eval (Op.const C) () id) id āŠ‘ eval (Op.add w) (eval (Op.const x) () id, eval (Op.neg w) (eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.neg w) Context.Var.last TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), x - C = x + -C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.neg w) Context.Var.last TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1556 -- precondition: true /- %r = sub i1 %x, %y => %r = xor %x, %y -/ theorem
alive_AddSub_1556: āˆ€ {c : Context BaseType} {e : EnvC c} (y x : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_AddSub_1556
: forall (
y: Bitvec 1
y
x: Bitvec 1
x
:
Bitvec: ā„• → Type
Bitvec
1: ?m.319640
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.319630
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.319653
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec 1
x
) %v0; %v2 := op:const (
y: Bitvec 1
y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub
1: ?m.320091
1
%v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.319630
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.320506
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec 1
x
) %v0; %v2 := op:const (
y: Bitvec 1
y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor
1: ?m.320943
1
%v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), eval (Op.sub 1) (eval (Op.const x) () id, eval (Op.const y) () id) id āŠ‘ eval (Op.xor 1) (eval (Op.const x) () id, eval (Op.const y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), x - y = x ^^^ y
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (y x : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1560 -- precondition: true /- %r = sub -1, %a => %r = xor %a, -1 -/ theorem
alive_AddSub_1560: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (-1)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_AddSub_1560
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.332834
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (-
1: ?m.332947
1
) %v0; %v2 := op:const (
a: Bitvec w
a
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.332834
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (-
1: ?m.333961
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (-1)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a : Bitvec w), eval (Op.sub w) (eval (Op.const (-1)) () id, eval (Op.const a) () id) id āŠ‘ eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const (-1)) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (-1)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a : Bitvec w), -1 - a = a ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (-1)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const a) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1564 -- precondition: true /- %nx = xor %x, -1 %r = sub C, %nx => %nx = xor %x, -1 %r = add %x, (C + 1) -/ theorem
alive_AddSub_1564: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
alive_AddSub_1564
: forall (w :
Nat: Type
Nat
) (
x: Bitvec w
x
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.350073
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.350329
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v5 %v4; %v7 := op:sub w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.350073
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.351717
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := op:const (
1: ?m.352429
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:add w %v7; %v9 := pair:%v1 %v8; %v10 := op:add w %v9 dsl_ret %v10 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), eval (Op.sub w) (eval (Op.const C) () id, eval (Op.xor w) (eval (Op.const x) () id, eval (Op.const (-1)) () id) id) id āŠ‘ eval (Op.add w) (eval (Op.const x) () id, eval (Op.add w) (eval (Op.const C) () id, eval (Op.const 1) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), C - (x ^^^ -1) = x + (C + 1)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1574 -- precondition: true /- %rhs = add %X, C2 %r = sub C, %rhs => %rhs = add %X, C2 %r = sub (C - C2), %X -/ theorem
alive_AddSub_1574: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AddSub_1574
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C: Bitvec w
C
C2: Bitvec w
C2
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.383780
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C2: Bitvec w
C2
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v5 %v4; %v7 := op:sub w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.383780
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C2: Bitvec w
C2
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v5 %v2; %v7 := op:sub w %v6; %v8 := pair:%v7 %v1; %v9 := op:sub w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), eval (Op.sub w) (eval (Op.const C) () id, eval (Op.add w) (eval (Op.const X) () id, eval (Op.const C2) () id) id) id āŠ‘ eval (Op.sub w) (eval (Op.sub w) (eval (Op.const C) () id, eval (Op.const C2) () id) id, eval (Op.const X) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), C - (X + C2) = C - C2 - X
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1614 -- precondition: true /- %Op1 = add %X, %Y %r = sub %X, %Op1 => %Op1 = add %X, %Y %r = sub 0, %Y -/ theorem
alive_AddSub_1614: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_AddSub_1614
: forall (w :
Nat: Type
Nat
) (
Y: Bitvec w
Y
X: Bitvec w
X
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.421825
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
Y: Bitvec w
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := pair:%v1 %v4; %v6 := op:sub w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.421825
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
Y: Bitvec w
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (
0: ?m.423790
0
) %v0; %v6 := pair:%v5 %v2; %v7 := op:sub w %v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), eval (Op.sub w) (eval (Op.const X) () id, eval (Op.add w) (eval (Op.const X) () id, eval (Op.const Y) () id) id) id āŠ‘ eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const Y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), X - (X + Y) = 0 - Y
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1619 -- precondition: true /- %Op0 = sub %X, %Y %r = sub %Op0, %X => %Op0 = sub %X, %Y %r = sub 0, %Y -/ theorem
alive_AddSub_1619: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 6 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_AddSub_1619
: forall (w :
Nat: Type
Nat
) (
Y: Bitvec w
Y
X: Bitvec w
X
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.447561
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
Y: Bitvec w
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := pair:%v4 %v1; %v6 := op:sub w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.447561
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
Y: Bitvec w
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
0: ?m.449526
0
) %v0; %v6 := pair:%v5 %v2; %v7 := op:sub w %v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 6 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), eval (Op.sub w) (eval (Op.sub w) (eval (Op.const X) () id, eval (Op.const Y) () id) id, eval (Op.const X) () id) id āŠ‘ eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const Y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 6 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), X - Y - X = 0 - Y
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 6 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:AddSub:1624 -- precondition: true /- %Op0 = or %A, %B %Op1 = xor %A, %B %r = sub %Op0, %Op1 => %Op0 = or %A, %B %Op1 = xor %A, %B %r = and %A, %B -/ theorem
alive_AddSub_1624: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AddSub_1624
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.473585
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := pair:%v1 %v2; %v6 := op:xor w %v5; %v7 := pair:%v4 %v6; %v8 := op:sub w %v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.473585
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := pair:%v1 %v2; %v6 := op:xor w %v5; %v7 := pair:%v1 %v2; %v8 := op:and w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.sub w) (eval (Op.or w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), (A ||| B) - (A ^^^ B) = A &&& B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:135 -- precondition: true /- %op = xor %X, C1 %r = and %op, C2 => %a = and %X, C2 %op = xor %X, C1 %r = xor %a, (C1 & C2) -/ theorem
alive_AndOrXor_135: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C1 C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_135
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C1: Bitvec w
C1
C2: Bitvec w
C2
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.499568
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C2: Bitvec w
C2
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.499568
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C2: Bitvec w
C2
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (
C1: Bitvec w
C1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:xor w %v6; %v8 := pair:%v5 %v2; %v9 := op:and w %v8; %v10 := pair:%v4 %v9; %v11 := op:xor w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), eval (Op.and w) (eval (Op.xor w) (eval (Op.const X) () id, eval (Op.const C1) () id) id, eval (Op.const C2) () id) id āŠ‘ eval (Op.xor w) (eval (Op.and w) (eval (Op.const X) () id, eval (Op.const C2) () id) id, eval (Op.and w) (eval (Op.const C1) () id, eval (Op.const C2) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), (X ^^^ C1) &&& C2 = X &&& C2 ^^^ C1 &&& C2
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:144 -- precondition: true /- %op = or %X, C1 %r = and %op, C2 => %o = or %X, (C1 & C2) %op = or %X, C1 %r = and %o, C2 -/ theorem
alive_AndOrXor_144: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C1 C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_144
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C1: Bitvec w
C1
C2: Bitvec w
C2
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.544966
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
C2: Bitvec w
C2
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.544966
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := op:const (
C2: Bitvec w
C2
) %v0; %v4 := pair:%v2 %v3; %v5 := op:and w %v4; %v6 := pair:%v1 %v5; %v7 := op:or w %v6; %v8 := pair:%v1 %v2; %v9 := op:or w %v8; %v10 := pair:%v7 %v3; %v11 := op:and w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), eval (Op.and w) (eval (Op.or w) (eval (Op.const X) () id, eval (Op.const C1) () id) id, eval (Op.const C2) () id) id āŠ‘ eval (Op.and w) (eval (Op.or w) (eval (Op.const X) () id, eval (Op.and w) (eval (Op.const C1) () id, eval (Op.const C2) () id) id) id, eval (Op.const C2) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), (X ||| C1) &&& C2 = (X ||| C1 &&& C2) &&& C2
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:698 -- precondition: true /- %a1 = and %a, %b %a2 = and %a, %d %op0 = icmp eq %a1, 0 %op1 = icmp eq %a2, 0 %r = and %op0, %op1 => %or = or %b, %d %a3 = and %a, %or %a1 = and %a, %b %a2 = and %a, %d %op0 = icmp eq %a1, 0 %op1 = icmp eq %a2, 0 %r = icmp eq %a3, 0 -/ theorem
alive_AndOrXor_698: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 15 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))))) TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 18 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))))))))) TSSA.rgn0) (TSSA.assign 19 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) Context.Var.last) (TSSA.assign 20 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))))) e
alive_AndOrXor_698
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
d: Bitvec w
d
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.591886
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.591907
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (
d: Bitvec w
d
) %v0; %v6 := pair:%v1 %v5; %v7 := op:and w %v6; %v8 := op:const (
0: ?m.593176
0
) %v0; %v9 := pair:%v4 %v8; %v10 := op:icmp eq w %v9; %v11 := op:const (
0: ?m.593742
0
) %v0; %v12 := pair:%v7 %v11; %v13 := op:icmp eq w %v12; %v14 := pair:%v10 %v13; %v15 := op:and
1: ?m.594386
1
%v14 dsl_ret %v15 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.591886
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.594721
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
b: Bitvec w
b
) %v0; %v2 := op:const (
d: Bitvec w
d
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
a: Bitvec w
a
) %v0; %v6 := pair:%v5 %v4; %v7 := op:and w %v6; %v8 := pair:%v5 %v1; %v9 := op:and w %v8; %v10 := pair:%v5 %v2; %v11 := op:and w %v10; %v12 := op:const (
0: ?m.596767
0
) %v0; %v13 := pair:%v9 %v12; %v14 := op:icmp eq w %v13; %v15 := op:const (
0: ?m.597348
0
) %v0; %v16 := pair:%v11 %v15; %v17 := op:icmp eq w %v16; %v18 := op:const (
0: ?m.597958
0
) %v0; %v19 := pair:%v7 %v18; %v20 := op:icmp eq w %v19 dsl_ret %v20 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 15 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))))) TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 18 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))))))))) TSSA.rgn0) (TSSA.assign 19 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) Context.Var.last) (TSSA.assign 20 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), eval (Op.and 1) (eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.const 0) () id) id, eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const d) () id) id, eval (Op.const 0) () id) id) id āŠ‘ eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.or w) (eval (Op.const b) () id, eval (Op.const d) () id) id) id, eval (Op.const 0) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 15 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))))) TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 18 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))))))))) TSSA.rgn0) (TSSA.assign 19 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) Context.Var.last) (TSSA.assign 20 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), ofBool (a &&& b == 0) &&& ofBool (a &&& d == 0) = ofBool (a &&& (b ||| d) == 0)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 15 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))))) TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 18 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))))))))) TSSA.rgn0) (TSSA.assign 19 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) Context.Var.last) (TSSA.assign 20 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:709 -- precondition: true /- %a1 = and %a, %b %a2 = and %a, %d %op0 = icmp eq %a1, %b %op1 = icmp eq %a2, %d %r = and %op0, %op1 => %or = or %b, %d %a3 = and %a, %or %a1 = and %a, %b %a2 = and %a, %d %op0 = icmp eq %a1, %b %op1 = icmp eq %a2, %d %r = icmp eq %a3, %or -/ theorem
alive_AndOrXor_709: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 15 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))))) e
alive_AndOrXor_709
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
d: Bitvec w
d
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.665173
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.665194
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (
d: Bitvec w
d
) %v0; %v6 := pair:%v1 %v5; %v7 := op:and w %v6; %v8 := pair:%v4 %v2; %v9 := op:icmp eq w %v8; %v10 := pair:%v7 %v5; %v11 := op:icmp eq w %v10; %v12 := pair:%v9 %v11; %v13 := op:and
1: ?m.667289
1
%v12 dsl_ret %v13 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.665173
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.667624
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
b: Bitvec w
b
) %v0; %v2 := op:const (
d: Bitvec w
d
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
a: Bitvec w
a
) %v0; %v6 := pair:%v5 %v4; %v7 := op:and w %v6; %v8 := pair:%v5 %v1; %v9 := op:and w %v8; %v10 := pair:%v5 %v2; %v11 := op:and w %v10; %v12 := pair:%v9 %v1; %v13 := op:icmp eq w %v12; %v14 := pair:%v11 %v2; %v15 := op:icmp eq w %v14; %v16 := pair:%v7 %v4; %v17 := op:icmp eq w %v16 dsl_ret %v17 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 15 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), eval (Op.and 1) (eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.const b) () id) id, eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const d) () id) id, eval (Op.const d) () id) id) id āŠ‘ eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.or w) (eval (Op.const b) () id, eval (Op.const d) () id) id) id, eval (Op.or w) (eval (Op.const b) () id, eval (Op.const d) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 15 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), ofBool (a &&& b == b) &&& ofBool (a &&& d == d) = ofBool (a &&& (b ||| d) == b ||| d)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 15 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:716 -- precondition: true /- %a1 = and %a, %b %a2 = and %a, %d %op0 = icmp eq %a1, %a %op1 = icmp eq %a2, %a %r = and %op0, %op1 => %a4 = and %b, %d %a3 = and %a, %a4 %a1 = and %a, %b %a2 = and %a, %d %op0 = icmp eq %a1, %a %op1 = icmp eq %a2, %a %r = icmp eq %a3, %a -/ theorem
alive_AndOrXor_716: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 15 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))))) e
alive_AndOrXor_716
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
d: Bitvec w
d
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.736857
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.736878
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (
d: Bitvec w
d
) %v0; %v6 := pair:%v1 %v5; %v7 := op:and w %v6; %v8 := pair:%v4 %v1; %v9 := op:icmp eq w %v8; %v10 := pair:%v7 %v1; %v11 := op:icmp eq w %v10; %v12 := pair:%v9 %v11; %v13 := op:and
1: ?m.738998
1
%v12 dsl_ret %v13 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.736857
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.739333
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
b: Bitvec w
b
) %v0; %v2 := op:const (
d: Bitvec w
d
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (
a: Bitvec w
a
) %v0; %v6 := pair:%v5 %v4; %v7 := op:and w %v6; %v8 := pair:%v5 %v1; %v9 := op:and w %v8; %v10 := pair:%v5 %v2; %v11 := op:and w %v10; %v12 := pair:%v9 %v5; %v13 := op:icmp eq w %v12; %v14 := pair:%v11 %v5; %v15 := op:icmp eq w %v14; %v16 := pair:%v7 %v5; %v17 := op:icmp eq w %v16 dsl_ret %v17 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 15 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), eval (Op.and 1) (eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.const a) () id) id, eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const d) () id) id, eval (Op.const a) () id) id) id āŠ‘ eval (Op.icmp Comparison.eq w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.and w) (eval (Op.const b) () id, eval (Op.const d) () id) id) id, eval (Op.const a) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 15 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), ofBool (a &&& b == a) &&& ofBool (a &&& d == a) = ofBool (a &&& (b &&& d) == a)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b d : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const d) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const d) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 15 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 16 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 17 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:794 -- precondition: true /- %op0 = icmp sgt %a, %b %op1 = icmp ne %a, %b %r = and %op0, %op1 => %op0 = icmp sgt %a, %b %op1 = icmp ne %a, %b %r = icmp sgt %a, %b -/ theorem
alive_AndOrXor_794: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AndOrXor_794
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.807531
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.807550
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp sgt w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp ne w %v5; %v7 := pair:%v4 %v6; %v8 := op:and
1: ?m.808721
1
%v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.807531
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.809136
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp sgt w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp ne w %v5; %v7 := pair:%v1 %v2; %v8 := op:icmp sgt w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.and 1) (eval (Op.icmp Comparison.sgt w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.icmp Comparison.ne w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.icmp Comparison.sgt w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), (a >ā‚› b) &&& ofBool (a != b) = (a >ā‚› b)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.sgt w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:827 -- precondition: true /- %op0 = icmp eq %a, 0 %op1 = icmp eq %b, 0 %r = and %op0, %op1 => %o = or %a, %b %op0 = icmp eq %a, 0 %op1 = icmp eq %b, 0 %r = icmp eq %o, 0 -/ theorem
alive_AndOrXor_827: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
alive_AndOrXor_827
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.833997
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.834016
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
0: ?m.834255
0
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp eq w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := op:const (
0: ?m.834937
0
) %v0; %v7 := pair:%v5 %v6; %v8 := op:icmp eq w %v7; %v9 := pair:%v4 %v8; %v10 := op:and
1: ?m.835546
1
%v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.833997
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.835881
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
0: ?m.836619
0
) %v0; %v6 := pair:%v1 %v5; %v7 := op:icmp eq w %v6; %v8 := op:const (
0: ?m.837170
0
) %v0; %v9 := pair:%v2 %v8; %v10 := op:icmp eq w %v9; %v11 := op:const (
0: ?m.837749
0
) %v0; %v12 := pair:%v4 %v11; %v13 := op:icmp eq w %v12 dsl_ret %v13 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.and 1) (eval (Op.icmp Comparison.eq w) (eval (Op.const a) () id, eval (Op.const 0) () id) id, eval (Op.icmp Comparison.eq w) (eval (Op.const b) () id, eval (Op.const 0) () id) id) id āŠ‘ eval (Op.icmp Comparison.eq w) (eval (Op.or w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.const 0) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), ofBool (a == 0) &&& ofBool (b == 0) = ofBool (a ||| b == 0)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:887-2 -- precondition: true /- %op0 = icmp eq %a, C1 %op1 = icmp ne %a, C1 %r = and %op0, %op1 => %op0 = icmp eq %a, C1 %op1 = icmp ne %a, C1 %r = false -/ theorem
alive_AndOrXor_887_2: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a C1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.copy 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AndOrXor_887_2
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
C1: Bitvec w
C1
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.876062
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.876081
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp eq w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp ne w %v5; %v7 := pair:%v4 %v6; %v8 := op:and
1: ?m.877252
1
%v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.876062
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.877667
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp eq w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp ne w %v5; %v7 := op:const (↑
false: Bool
false
) %v0; %v8 := op:copy
1: ?m.879028
1
%v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a C1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.copy 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a C1 : Bitvec w), eval (Op.and 1) (eval (Op.icmp Comparison.eq w) (eval (Op.const a) () id, eval (Op.const C1) () id) id, eval (Op.icmp Comparison.ne w) (eval (Op.const a) () id, eval (Op.const C1) () id) id) id āŠ‘ eval (Op.copy 1) (eval (Op.const (ofBool false)) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a C1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.copy 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a C1 : Bitvec w), ofBool (a == C1) &&& ofBool (a != C1) = ofBool false
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a C1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.copy 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1230 ~A & ~B -> ~(A | B) -- precondition: true /- %op0 = xor %notOp0, -1 %op1 = xor %notOp1, -1 %r = and %op0, %op1 => %or = or %notOp0, %notOp1 %op0 = xor %notOp0, -1 %op1 = xor %notOp1, -1 %r = xor %or, -1 -/ theorem
alive_AndOrXor_1230__A__B___A__B: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (notOp0 notOp1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const notOp0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const notOp1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const notOp0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const notOp1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
alive_AndOrXor_1230__A__B___A__B
: forall (w :
Nat: Type
Nat
) (
notOp0: Bitvec w
notOp0
notOp1: Bitvec w
notOp1
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.900665
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
notOp0: Bitvec w
notOp0
) %v0; %v2 := op:const (-
1: ?m.900921
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
notOp1: Bitvec w
notOp1
) %v0; %v6 := op:const (-
1: ?m.901609
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v4 %v8; %v10 := op:and w %v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.900665
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
notOp0: Bitvec w
notOp0
) %v0; %v2 := op:const (
notOp1: Bitvec w
notOp1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (-
1: ?m.903314
1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:xor w %v6; %v8 := op:const (-
1: ?m.903876
1
) %v0; %v9 := pair:%v2 %v8; %v10 := op:xor w %v9; %v11 := op:const (-
1: ?m.904466
1
) %v0; %v12 := pair:%v4 %v11; %v13 := op:xor w %v12 dsl_ret %v13 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (notOp0 notOp1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const notOp0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const notOp1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const notOp0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const notOp1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (notOp0 notOp1 : Bitvec w), eval (Op.and w) (eval (Op.xor w) (eval (Op.const notOp0) () id, eval (Op.const (-1)) () id) id, eval (Op.xor w) (eval (Op.const notOp1) () id, eval (Op.const (-1)) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.or w) (eval (Op.const notOp0) () id, eval (Op.const notOp1) () id) id, eval (Op.const (-1)) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (notOp0 notOp1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const notOp0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const notOp1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const notOp0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const notOp1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (notOp0 notOp1 : Bitvec w), (notOp0 ^^^ -1) &&& (notOp1 ^^^ -1) = (notOp0 ||| notOp1) ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (notOp0 notOp1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const notOp0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const notOp1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const notOp0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const notOp1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1241 (A|B) & ~(A&B) => A^B -- precondition: true /- %op0 = or %A, %B %notOp1 = and %A, %B %op1 = xor %notOp1, -1 %r = and %op0, %op1 => %op0 = or %A, %B %notOp1 = and %A, %B %op1 = xor %notOp1, -1 %r = xor %A, %B -/ theorem
alive_AndOrXor_1241_AB__AB__AB: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_1241_AB__AB__AB
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.943311
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := pair:%v1 %v2; %v6 := op:and w %v5; %v7 := op:const (-
1: ?m.944441
1
) %v0; %v8 := pair:%v6 %v7; %v9 := op:xor w %v8; %v10 := pair:%v4 %v9; %v11 := op:and w %v10 dsl_ret %v11 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.943311
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := pair:%v1 %v2; %v6 := op:and w %v5; %v7 := op:const (-
1: ?m.946587
1
) %v0; %v8 := pair:%v6 %v7; %v9 := op:xor w %v8; %v10 := pair:%v1 %v2; %v11 := op:xor w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.and w) (eval (Op.or w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.const (-1)) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), (A ||| B) &&& (A &&& B ^^^ -1) = A ^^^ B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1247 ~(A&B) & (A|B) => A^B -- precondition: true /- %notOp0 = and %A, %B %op0 = xor %notOp0, -1 %op1 = or %A, %B %r = and %op0, %op1 => %notOp0 = and %A, %B %op0 = xor %notOp0, -1 %op1 = or %A, %B %r = xor %A, %B -/ theorem
alive_AndOrXor_1247_AB__AB__AB: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_1247_AB__AB__AB
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.978283
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (-
1: ?m.979039
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6; %v8 := pair:%v1 %v2; %v9 := op:or w %v8; %v10 := pair:%v7 %v9; %v11 := op:and w %v10 dsl_ret %v11 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.978283
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (-
1: ?m.981190
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6; %v8 := pair:%v1 %v2; %v9 := op:or w %v8; %v10 := pair:%v1 %v2; %v11 := op:xor w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.and w) (eval (Op.xor w) (eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.const (-1)) () id) id, eval (Op.or w) (eval (Op.const A) () id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), (A &&& B ^^^ -1) &&& (A ||| B) = A ^^^ B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1253 A & (A^B) -> A & ~B -- precondition: true /- %op0 = xor %A, %B %r = and %op0, %A => %notB = xor %B, -1 %op0 = xor %A, %B %r = and %A, %notB -/ theorem
alive_AndOrXor_1253_A__AB___A__B: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_1253_A__AB___A__B
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1012320
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := pair:%v4 %v1; %v6 := op:and w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1012320
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (-
1: ?m.1013786
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := pair:%v5 %v1; %v7 := op:xor w %v6; %v8 := pair:%v5 %v4; %v9 := op:and w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.and w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.const A) () id) id āŠ‘ eval (Op.and w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.const B) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), (A ^^^ B) &&& A = A &&& (B ^^^ -1)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 6 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1280 (~A|B)&A -> A&B -- precondition: true /- %nA = xor %A, -1 %op0 = or %nA, %B %r = and %op0, %A => %nA = xor %A, -1 %op0 = or %nA, %B %r = and %A, %B -/ theorem
alive_AndOrXor_1280_ABA___AB: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_1280_ABA___AB
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1046937
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1047193
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v4 %v5; %v7 := op:or w %v6; %v8 := pair:%v7 %v1; %v9 := op:and w %v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1046937
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1048960
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v4 %v5; %v7 := op:or w %v6; %v8 := pair:%v1 %v5; %v9 := op:and w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.and w) (eval (Op.or w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.const B) () id) id, eval (Op.const A) () id) id āŠ‘ eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), (A ^^^ -1 ||| B) &&& A = A &&& B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1288 (A ^ B) & ((B ^ C) ^ A) -> (A ^ B) & ~C -- precondition: true /- %op0 = xor %A, %B %x = xor %B, %C %op1 = xor %x, %A %r = and %op0, %op1 => %op0 = xor %A, %B %negC = xor %C, -1 %x = xor %B, %C %op1 = xor %x, %A %r = and %op0, %negC -/ theorem
alive_AndOrXor_1288_A__B__B__C__A___A__B__C: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
alive_AndOrXor_1288_A__B__B__C__A___A__B__C
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
C: Bitvec w
C
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1081353
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v2 %v5; %v7 := op:xor w %v6; %v8 := pair:%v7 %v1; %v9 := op:xor w %v8; %v10 := pair:%v4 %v9; %v11 := op:and w %v10 dsl_ret %v11 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1081353
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := op:const (-
1: ?m.1084316
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v2 %v5; %v10 := op:xor w %v9; %v11 := pair:%v10 %v1; %v12 := op:xor w %v11; %v13 := pair:%v4 %v8; %v14 := op:and w %v13 dsl_ret %v14 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), eval (Op.and w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.xor w) (eval (Op.const B) () id, eval (Op.const C) () id) id, eval (Op.const A) () id) id) id āŠ‘ eval (Op.and w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.const C) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), (A ^^^ B) &&& (B ^^^ C ^^^ A) = (A ^^^ B) &&& (C ^^^ -1)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1294 (A | B) & ((~A) ^ B) -> (A & B) -- precondition: true /- %op0 = or %A, %B %x = xor %A, -1 %op1 = xor %x, %B %r = and %op0, %op1 => %op0 = or %A, %B %x = xor %A, -1 %op1 = xor %x, %B %r = and %A, %B -/ theorem
alive_AndOrXor_1294_A__B__A__B___A__B: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_1294_A__B__A__B___A__B
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1136833
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (-
1: ?m.1137589
1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:xor w %v6; %v8 := pair:%v7 %v2; %v9 := op:xor w %v8; %v10 := pair:%v4 %v9; %v11 := op:and w %v10 dsl_ret %v11 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1136833
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (-
1: ?m.1139740
1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:xor w %v6; %v8 := pair:%v7 %v2; %v9 := op:xor w %v8; %v10 := pair:%v1 %v2; %v11 := op:and w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.and w) (eval (Op.or w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), (A ||| B) &&& (A ^^^ -1 ^^^ B) = A &&& B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 11 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1683-1 -- precondition: true /- %op0 = icmp ugt %a, %b %op1 = icmp eq %a, %b %r = or %op0, %op1 => %op0 = icmp ugt %a, %b %op1 = icmp eq %a, %b %r = icmp uge %a, %b -/ theorem
alive_AndOrXor_1683_1: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AndOrXor_1683_1
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1174338
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1174357
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp ugt w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp eq w %v5; %v7 := pair:%v4 %v6; %v8 := op:or
1: ?m.1175528
1
%v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1174338
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1175943
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp ugt w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp eq w %v5; %v7 := pair:%v1 %v2; %v8 := op:icmp uge w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.or 1) (eval (Op.icmp Comparison.ugt w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.icmp Comparison.eq w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.icmp Comparison.uge w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), (a >ᵤ b) ||| ofBool (a == b) = (a ≄ᵤ b)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1683-2 -- precondition: true /- %op0 = icmp uge %a, %b %op1 = icmp ne %a, %b %r = or %op0, %op1 => %op0 = icmp uge %a, %b %op1 = icmp ne %a, %b %r = true -/ theorem
alive_AndOrXor_1683_2: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.copy 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AndOrXor_1683_2
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1200614
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1200633
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp uge w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp ne w %v5; %v7 := pair:%v4 %v6; %v8 := op:or
1: ?m.1201804
1
%v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1200614
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1202219
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp uge w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp ne w %v5; %v7 := op:const (↑
true: Bool
true
) %v0; %v8 := op:copy
1: ?m.1203580
1
%v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.copy 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.or 1) (eval (Op.icmp Comparison.uge w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.icmp Comparison.ne w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.copy 1) (eval (Op.const (ofBool true)) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.copy 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), (a ≄ᵤ b) ||| ofBool (a != b) = ofBool true
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.copy 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1704 -- precondition: true /- %cmp1 = icmp eq %B, 0 %cmp2 = icmp ult %A, %B %r = or %cmp1, %cmp2 => %b1 = add %B, -1 %cmp1 = icmp eq %B, 0 %cmp2 = icmp ult %A, %B %r = icmp uge %b1, %A -/ theorem
alive_AndOrXor_1704: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ult w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ult w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_1704
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1225115
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1225134
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (
0: ?m.1225373
0
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp eq w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := pair:%v5 %v1; %v7 := op:icmp ult w %v6; %v8 := pair:%v4 %v7; %v9 := op:or
1: ?m.1226487
1
%v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1225115
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1226902
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (-
1: ?m.1227141
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (
0: ?m.1227669
0
) %v0; %v6 := pair:%v1 %v5; %v7 := op:icmp eq w %v6; %v8 := op:const (
A: Bitvec w
A
) %v0; %v9 := pair:%v8 %v1; %v10 := op:icmp ult w %v9; %v11 := pair:%v4 %v8; %v12 := op:icmp uge w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ult w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ult w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or 1) (eval (Op.icmp Comparison.eq w) (eval (Op.const B) () id, eval (Op.const 0) () id) id, eval (Op.icmp Comparison.ult w) (eval (Op.const A) () id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.icmp Comparison.uge w) (eval (Op.add w) (eval (Op.const B) () id, eval (Op.const (-1)) () id) id, eval (Op.const A) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ult w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ult w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), ofBool (B == 0) ||| (A <ᵤ B) = (B + -1 ≄ᵤ A)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ult w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ult w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1705 -- precondition: true /- %cmp1 = icmp eq %B, 0 %cmp2 = icmp ugt %B, %A %r = or %cmp1, %cmp2 => %b1 = add %B, -1 %cmp1 = icmp eq %B, 0 %cmp2 = icmp ugt %B, %A %r = icmp uge %b1, %A -/ theorem
alive_AndOrXor_1705: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_1705
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1268167
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1268186
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (
0: ?m.1268425
0
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp eq w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := pair:%v1 %v5; %v7 := op:icmp ugt w %v6; %v8 := pair:%v4 %v7; %v9 := op:or
1: ?m.1269539
1
%v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1268167
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1269954
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (-
1: ?m.1270193
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (
0: ?m.1270721
0
) %v0; %v6 := pair:%v1 %v5; %v7 := op:icmp eq w %v6; %v8 := op:const (
A: Bitvec w
A
) %v0; %v9 := pair:%v1 %v8; %v10 := op:icmp ugt w %v9; %v11 := pair:%v4 %v8; %v12 := op:icmp uge w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or 1) (eval (Op.icmp Comparison.eq w) (eval (Op.const B) () id, eval (Op.const 0) () id) id, eval (Op.icmp Comparison.ugt w) (eval (Op.const B) () id, eval (Op.const A) () id) id) id āŠ‘ eval (Op.icmp Comparison.uge w) (eval (Op.add w) (eval (Op.const B) () id, eval (Op.const (-1)) () id) id, eval (Op.const A) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), ofBool (B == 0) ||| (B >ᵤ A) = (B + -1 ≄ᵤ A)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.eq w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ugt w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:1733 -- precondition: true /- %cmp1 = icmp ne %A, 0 %cmp2 = icmp ne %B, 0 %r = or %cmp1, %cmp2 => %or = or %A, %B %cmp1 = icmp ne %A, 0 %cmp2 = icmp ne %B, 0 %r = icmp ne %or, 0 -/ theorem
alive_AndOrXor_1733: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
alive_AndOrXor_1733
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1311319
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1311338
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
0: ?m.1311577
0
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp ne w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := op:const (
0: ?m.1312259
0
) %v0; %v7 := pair:%v5 %v6; %v8 := op:icmp ne w %v7; %v9 := pair:%v4 %v8; %v10 := op:or
1: ?m.1312868
1
%v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1311319
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.1313203
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
0: ?m.1313941
0
) %v0; %v6 := pair:%v1 %v5; %v7 := op:icmp ne w %v6; %v8 := op:const (
0: ?m.1314492
0
) %v0; %v9 := pair:%v2 %v8; %v10 := op:icmp ne w %v9; %v11 := op:const (
0: ?m.1315071
0
) %v0; %v12 := pair:%v4 %v11; %v13 := op:icmp ne w %v12 dsl_ret %v13 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or 1) (eval (Op.icmp Comparison.ne w) (eval (Op.const A) () id, eval (Op.const 0) () id) id, eval (Op.icmp Comparison.ne w) (eval (Op.const B) () id, eval (Op.const 0) () id) id) id āŠ‘ eval (Op.icmp Comparison.ne w) (eval (Op.or w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.const 0) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), ofBool (A != 0) ||| ofBool (B != 0) = ofBool (A ||| B != 0)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const 0) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2063 (X ^ C1) | C2 --> (X | C2) ^ (C1 & ~C2) -- precondition: true /- %op0 = xor %x, C1 %r = or %op0, C => %or = or %x, C %op0 = xor %x, C1 %r = xor %or, (C1 & ~C) -/ theorem
alive_AndOrXor_2063__X__C1__C2____X__C2__C1__C2: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (x C1 C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.not w) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_2063__X__C1__C2____X__C2__C1__C2
: forall (w :
Nat: Type
Nat
) (
x: Bitvec w
x
C1: Bitvec w
C1
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1353131
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v4 %v5; %v7 := op:or w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1353131
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
C1: Bitvec w
C1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:xor w %v6; %v8 := op:not w %v2; %v9 := pair:%v5 %v8; %v10 := op:and w %v9; %v11 := pair:%v4 %v10; %v12 := op:xor w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C1 C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.not w) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C1 C : Bitvec w), eval (Op.or w) (eval (Op.xor w) (eval (Op.const x) () id, eval (Op.const C1) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.xor w) (eval (Op.or w) (eval (Op.const x) () id, eval (Op.const C) () id) id, eval (Op.and w) (eval (Op.const C1) () id, eval (Op.not w) (eval (Op.const C) () id) id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C1 C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.not w) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C1 C : Bitvec w), x ^^^ C1 ||| C = (x ||| C) ^^^ C1 &&& ~~~C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C1 C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.not w) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2113 ((~A & B) | A) -> (A | B) -- precondition: true /- %negA = xor %A, -1 %op0 = and %negA, %B %r = or %op0, %A => %negA = xor %A, -1 %op0 = and %negA, %B %r = or %A, %B -/ theorem
alive_AndOrXor_2113___A__B__A___A__B: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_2113___A__B__A___A__B
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1399744
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1400000
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6; %v8 := pair:%v7 %v1; %v9 := op:or w %v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1399744
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1401767
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6; %v8 := pair:%v1 %v5; %v9 := op:or w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.and w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.const B) () id) id, eval (Op.const A) () id) id āŠ‘ eval (Op.or w) (eval (Op.const A) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), (A ^^^ -1) &&& B ||| A = A ||| B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2118 ((A & B) | ~A) -> (~A | B) -- precondition: true /- %negA = xor %A, -1 %op0 = and %A, %B %r = or %op0, %negA => %negA = xor %A, -1 %op0 = and %A, %B %r = or %negA, %B -/ theorem
alive_AndOrXor_2118___A__B__A___A__B: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_2118___A__B__A___A__B
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1433881
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1434137
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v1 %v5; %v7 := op:and w %v6; %v8 := pair:%v7 %v4; %v9 := op:or w %v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1433881
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1435904
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v1 %v5; %v7 := op:and w %v6; %v8 := pair:%v4 %v5; %v9 := op:or w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), A &&& B ||| A ^^^ -1 = A ^^^ -1 ||| B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2123 (A & (~B)) | (A ^ B) -> (A ^ B) -- precondition: true /- %negB = xor %B, -1 %op0 = and %A, %negB %op1 = xor %A, %B %r = or %op0, %op1 => %negB = xor %B, -1 %op0 = and %A, %negB %op1 = xor %A, %B %r = xor %A, %B -/ theorem
alive_AndOrXor_2123___A__B__A__B___A__B: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_2123___A__B__A__B___A__B
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1468419
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (-
1: ?m.1468675
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := pair:%v5 %v4; %v7 := op:and w %v6; %v8 := pair:%v5 %v1; %v9 := op:xor w %v8; %v10 := pair:%v7 %v9; %v11 := op:or w %v10 dsl_ret %v11 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1468419
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (-
1: ?m.1470811
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := pair:%v5 %v4; %v7 := op:and w %v6; %v8 := pair:%v5 %v1; %v9 := op:xor w %v8; %v10 := pair:%v5 %v1; %v11 := op:xor w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.and w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.const B) () id, eval (Op.const (-1)) () id) id) id, eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), A &&& (B ^^^ -1) ||| A ^^^ B = A ^^^ B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2188 -- precondition: true /- %C = xor %D, -1 %B = xor %A, -1 %op0 = and %A, %C %op1 = and %B, %D %r = or %op0, %op1 => %C = xor %D, -1 %B = xor %A, -1 %op0 = and %A, %C %op1 = and %B, %D %r = xor %A, %D -/ theorem
alive_AndOrXor_2188: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A D : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const D) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const D) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
alive_AndOrXor_2188
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
D: Bitvec w
D
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1507974
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
D: Bitvec w
D
) %v0; %v2 := op:const (-
1: ?m.1508230
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := op:const (-
1: ?m.1508918
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v5 %v4; %v10 := op:and w %v9; %v11 := pair:%v8 %v1; %v12 := op:and w %v11; %v13 := pair:%v10 %v12; %v14 := op:or w %v13 dsl_ret %v14 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1507974
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
D: Bitvec w
D
) %v0; %v2 := op:const (-
1: ?m.1510901
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := op:const (-
1: ?m.1511594
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v5 %v4; %v10 := op:and w %v9; %v11 := pair:%v8 %v1; %v12 := op:and w %v11; %v13 := pair:%v5 %v1; %v14 := op:xor w %v13 dsl_ret %v14 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A D : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const D) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const D) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A D : Bitvec w), eval (Op.or w) (eval (Op.and w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.const D) () id, eval (Op.const (-1)) () id) id) id, eval (Op.and w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.const D) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const D) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A D : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const D) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const D) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A D : Bitvec w), A &&& (D ^^^ -1) ||| (A ^^^ -1) &&& D = A ^^^ D
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A D : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const D) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const D) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2231 (A ^ B) | ((B ^ C) ^ A) -> (A ^ B) | C -- precondition: true /- %op0 = xor %A, %B %x = xor %B, %C %op1 = xor %x, %A %r = or %op0, %op1 => %op0 = xor %A, %B %x = xor %B, %C %op1 = xor %x, %A %r = or %op0, %C -/ theorem
alive_AndOrXor_2231__A__B__B__C__A___A__B__C: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_2231__A__B__B__C__A___A__B__C
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
C: Bitvec w
C
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1558148
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v2 %v5; %v7 := op:xor w %v6; %v8 := pair:%v7 %v1; %v9 := op:xor w %v8; %v10 := pair:%v4 %v9; %v11 := op:or w %v10 dsl_ret %v11 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1558148
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v2 %v5; %v7 := op:xor w %v6; %v8 := pair:%v7 %v1; %v9 := op:xor w %v8; %v10 := pair:%v4 %v5; %v11 := op:or w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), eval (Op.or w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.xor w) (eval (Op.const B) () id, eval (Op.const C) () id) id, eval (Op.const A) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.const C) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), A ^^^ B ||| B ^^^ C ^^^ A = A ^^^ B ||| C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2243 ((B | C) & A) | B -> B | (A & C) -- precondition: true /- %o = or %B, %C %op0 = and %o, %A %r = or %op0, %B => %a = and %A, %C %o = or %B, %C %op0 = and %o, %A %r = or %B, %a -/ theorem
alive_AndOrXor_2243__B__C__A__B___B__A__C: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_2243__B__C__A__B___B__A__C
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
C: Bitvec w
C
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1605709
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6; %v8 := pair:%v7 %v1; %v9 := op:or w %v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1605709
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v5 %v2; %v7 := op:or w %v6; %v8 := pair:%v7 %v1; %v9 := op:and w %v8; %v10 := pair:%v5 %v4; %v11 := op:or w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), eval (Op.or w) (eval (Op.and w) (eval (Op.or w) (eval (Op.const B) () id, eval (Op.const C) () id) id, eval (Op.const A) () id) id, eval (Op.const B) () id) id āŠ‘ eval (Op.or w) (eval (Op.const B) () id, eval (Op.and w) (eval (Op.const A) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), (B ||| C) &&& A ||| B = B ||| A &&& C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2247 (~A | ~B) == (~(A & B)) -- precondition: true /- %na = xor %A, -1 %nb = xor %B, -1 %r = or %na, %nb => %a = and %A, %B %na = xor %A, -1 %nb = xor %B, -1 %r = xor %a, -1 -/ theorem
alive_AndOrXor_2247__A__B__A__B: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
alive_AndOrXor_2247__A__B__A__B
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1652388
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1652644
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := op:const (-
1: ?m.1653332
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v4 %v8; %v10 := op:or w %v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1652388
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (-
1: ?m.1655037
1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:xor w %v6; %v8 := op:const (-
1: ?m.1655599
1
) %v0; %v9 := pair:%v2 %v8; %v10 := op:xor w %v9; %v11 := op:const (-
1: ?m.1656189
1
) %v0; %v12 := pair:%v4 %v11; %v13 := op:xor w %v12 dsl_ret %v13 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.xor w) (eval (Op.const B) () id, eval (Op.const (-1)) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.const (-1)) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), A ^^^ -1 ||| B ^^^ -1 = A &&& B ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))) TSSA.rgn0) (TSSA.assign 12 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 13 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2263 -- precondition: true /- %op1 = xor %op0, %B %r = or %op0, %op1 => %op1 = xor %op0, %B %r = or %op0, %B -/ theorem
alive_AndOrXor_2263: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (B op0 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e
alive_AndOrXor_2263
: forall (w :
Nat: Type
Nat
) (
B: Bitvec w
B
op0: Bitvec w
op0
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1694077
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
op0: Bitvec w
op0
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := pair:%v1 %v4; %v6 := op:or w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1694077
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
op0: Bitvec w
op0
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := pair:%v1 %v2; %v6 := op:or w %v5 dsl_ret %v6 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (B op0 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (B op0 : Bitvec w), eval (Op.or w) (eval (Op.const op0) () id, eval (Op.xor w) (eval (Op.const op0) () id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.const op0) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (B op0 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (B op0 : Bitvec w), op0 ||| op0 ^^^ B = op0 ||| B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (B op0 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2264 -- precondition: true /- %na = xor %A, -1 %op1 = xor %na, %B %r = or %A, %op1 => %nb = xor %B, -1 %na = xor %A, -1 %op1 = xor %na, %B %r = or %A, %nb -/ theorem
alive_AndOrXor_2264: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_2264
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1716814
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1717070
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6; %v8 := pair:%v1 %v7; %v9 := op:or w %v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1716814
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (-
1: ?m.1718837
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := op:const (-
1: ?m.1719550
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v8 %v1; %v10 := op:xor w %v9; %v11 := pair:%v5 %v4; %v12 := op:or w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.const B) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), A ||| A ^^^ -1 ^^^ B = A ||| B ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2265 -- precondition: true /- %op0 = and %A, %B %op1 = xor %A, %B %r = or %op0, %op1 => %op0 = and %A, %B %op1 = xor %A, %B %r = or %A, %B -/ theorem
alive_AndOrXor_2265: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AndOrXor_2265
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1758378
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:xor w %v5; %v7 := pair:%v4 %v6; %v8 := op:or w %v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1758378
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:xor w %v5; %v7 := pair:%v1 %v2; %v8 := op:or w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.const A) () id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), A &&& B ||| A ^^^ B = A ||| B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2284 -- precondition: true /- %o = or %A, %B %op1 = xor %o, -1 %r = or %A, %op1 => %not = xor %B, -1 %o = or %A, %B %op1 = xor %o, -1 %r = or %A, %not -/ theorem
alive_AndOrXor_2284: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_2284
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1784692
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (-
1: ?m.1785448
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6; %v8 := pair:%v1 %v7; %v9 := op:or w %v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1784692
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (-
1: ?m.1786715
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := pair:%v5 %v1; %v7 := op:or w %v6; %v8 := op:const (-
1: ?m.1787797
1
) %v0; %v9 := pair:%v7 %v8; %v10 := op:xor w %v9; %v11 := pair:%v5 %v4; %v12 := op:or w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.or w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.const (-1)) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.const B) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), A ||| (A ||| B) ^^^ -1 = A ||| B ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2285 -- precondition: true /- %o = xor %A, %B %op1 = xor %o, -1 %r = or %A, %op1 => %not = xor %B, -1 %o = xor %A, %B %op1 = xor %o, -1 %r = or %A, %not -/ theorem
alive_AndOrXor_2285: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_2285
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1827468
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (-
1: ?m.1828224
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6; %v8 := pair:%v1 %v7; %v9 := op:or w %v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1827468
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec w
B
) %v0; %v2 := op:const (-
1: ?m.1829491
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
A: Bitvec w
A
) %v0; %v6 := pair:%v5 %v1; %v7 := op:xor w %v6; %v8 := op:const (-
1: ?m.1830573
1
) %v0; %v9 := pair:%v7 %v8; %v10 := op:xor w %v9; %v11 := pair:%v5 %v4; %v12 := op:or w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.const (-1)) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.const A) () id, eval (Op.xor w) (eval (Op.const B) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), A ||| A ^^^ B ^^^ -1 = A ||| B ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const A) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2297 -- precondition: true /- %op0 = and %A, %B %na = xor %A, -1 %op1 = xor %na, %B %r = or %op0, %op1 => %na = xor %A, -1 %op0 = and %A, %B %op1 = xor %na, %B %r = xor %na, %B -/ theorem
alive_AndOrXor_2297: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_AndOrXor_2297
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
B: Bitvec w
B
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1870634
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
B: Bitvec w
B
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (-
1: ?m.1871390
1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:xor w %v6; %v8 := pair:%v7 %v2; %v9 := op:xor w %v8; %v10 := pair:%v4 %v9; %v11 := op:or w %v10 dsl_ret %v11 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1870634
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (-
1: ?m.1873041
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
B: Bitvec w
B
) %v0; %v6 := pair:%v1 %v5; %v7 := op:and w %v6; %v8 := pair:%v4 %v5; %v9 := op:xor w %v8; %v10 := pair:%v4 %v5; %v11 := op:xor w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), eval (Op.or w) (eval (Op.and w) (eval (Op.const A) () id, eval (Op.const B) () id) id, eval (Op.xor w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.const B) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.xor w) (eval (Op.const A) () id, eval (Op.const (-1)) () id) id, eval (Op.const B) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), A &&& B ||| A ^^^ -1 ^^^ B = A ^^^ -1 ^^^ B
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A B : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const B) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const B) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2367 -- precondition: true /- %op0 = or %A, C1 %r = or %op0, %op1 => %i = or %A, %op1 %op0 = or %A, C1 %r = or %i, C1 -/ theorem
alive_AndOrXor_2367: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (A C1 op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_2367
: forall (w :
Nat: Type
Nat
) (
A: Bitvec w
A
C1: Bitvec w
C1
op1: Bitvec w
op1
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1910398
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
op1: Bitvec w
op1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:or w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1910398
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
A: Bitvec w
A
) %v0; %v2 := op:const (
op1: Bitvec w
op1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (
C1: Bitvec w
C1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:or w %v6; %v8 := pair:%v4 %v5; %v9 := op:or w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C1 op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C1 op1 : Bitvec w), eval (Op.or w) (eval (Op.or w) (eval (Op.const A) () id, eval (Op.const C1) () id) id, eval (Op.const op1) () id) id āŠ‘ eval (Op.or w) (eval (Op.or w) (eval (Op.const A) () id, eval (Op.const op1) () id) id, eval (Op.const C1) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C1 op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C1 op1 : Bitvec w), A ||| C1 ||| op1 = A ||| op1 ||| C1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (A C1 op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const A) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2416 -- precondition: true /- %x = xor %nx, -1 %op0 = and %x, %y %r = xor %op0, -1 => %ny = xor %y, -1 %x = xor %nx, -1 %op0 = and %x, %y %r = or %nx, %ny -/ theorem
alive_AndOrXor_2416: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (nx y : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const nx) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const nx) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_2416
: forall (w :
Nat: Type
Nat
) (
nx: Bitvec w
nx
y: Bitvec w
y
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1948383
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
nx: Bitvec w
nx
) %v0; %v2 := op:const (-
1: ?m.1948639
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
y: Bitvec w
y
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6; %v8 := op:const (-
1: ?m.1949681
1
) %v0; %v9 := pair:%v7 %v8; %v10 := op:xor w %v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1948383
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
y: Bitvec w
y
) %v0; %v2 := op:const (-
1: ?m.1950607
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
nx: Bitvec w
nx
) %v0; %v6 := op:const (-
1: ?m.1951300
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v8 %v1; %v10 := op:and w %v9; %v11 := pair:%v5 %v4; %v12 := op:or w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const nx) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const nx) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), eval (Op.xor w) (eval (Op.and w) (eval (Op.xor w) (eval (Op.const nx) () id, eval (Op.const (-1)) () id) id, eval (Op.const y) () id) id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.or w) (eval (Op.const nx) () id, eval (Op.xor w) (eval (Op.const y) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const nx) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const nx) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), (nx ^^^ -1) &&& y ^^^ -1 = nx ||| y ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const nx) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const nx) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2417 -- precondition: true /- %x = xor %nx, -1 %op0 = or %x, %y %r = xor %op0, -1 => %ny = xor %y, -1 %x = xor %nx, -1 %op0 = or %x, %y %r = and %nx, %ny -/ theorem
alive_AndOrXor_2417: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (nx y : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const nx) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const nx) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_2417
: forall (w :
Nat: Type
Nat
) (
nx: Bitvec w
nx
y: Bitvec w
y
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1990777
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
nx: Bitvec w
nx
) %v0; %v2 := op:const (-
1: ?m.1991033
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
y: Bitvec w
y
) %v0; %v6 := pair:%v4 %v5; %v7 := op:or w %v6; %v8 := op:const (-
1: ?m.1992075
1
) %v0; %v9 := pair:%v7 %v8; %v10 := op:xor w %v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.1990777
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
y: Bitvec w
y
) %v0; %v2 := op:const (-
1: ?m.1993001
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
nx: Bitvec w
nx
) %v0; %v6 := op:const (-
1: ?m.1993694
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v8 %v1; %v10 := op:or w %v9; %v11 := pair:%v5 %v4; %v12 := op:and w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const nx) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const nx) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), eval (Op.xor w) (eval (Op.or w) (eval (Op.xor w) (eval (Op.const nx) () id, eval (Op.const (-1)) () id) id, eval (Op.const y) () id) id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.and w) (eval (Op.const nx) () id, eval (Op.xor w) (eval (Op.const y) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const nx) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const nx) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), (nx ^^^ -1 ||| y) ^^^ -1 = nx &&& (y ^^^ -1)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (nx y : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const nx) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const nx) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2429 -- precondition: true /- %op0 = and %x, %y %r = xor %op0, -1 => %nx = xor %x, -1 %ny = xor %y, -1 %op0 = and %x, %y %r = or %nx, %ny -/ theorem
alive_AndOrXor_2429: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_2429
: forall (w :
Nat: Type
Nat
) (
y: Bitvec w
y
x: Bitvec w
x
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2032580
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
y: Bitvec w
y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (-
1: ?m.2033336
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2032580
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.2034224
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
y: Bitvec w
y
) %v0; %v6 := op:const (-
1: ?m.2034937
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v1 %v5; %v10 := op:and w %v9; %v11 := pair:%v4 %v8; %v12 := op:or w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), eval (Op.xor w) (eval (Op.and w) (eval (Op.const x) () id, eval (Op.const y) () id) id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.or w) (eval (Op.xor w) (eval (Op.const x) () id, eval (Op.const (-1)) () id) id, eval (Op.xor w) (eval (Op.const y) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), x &&& y ^^^ -1 = x ^^^ -1 ||| y ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2430 -- precondition: true /- %op0 = or %x, %y %r = xor %op0, -1 => %nx = xor %x, -1 %ny = xor %y, -1 %op0 = or %x, %y %r = and %nx, %ny -/ theorem
alive_AndOrXor_2430: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
alive_AndOrXor_2430
: forall (w :
Nat: Type
Nat
) (
y: Bitvec w
y
x: Bitvec w
x
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2073422
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
y: Bitvec w
y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := op:const (-
1: ?m.2074178
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2073422
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.2075066
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
y: Bitvec w
y
) %v0; %v6 := op:const (-
1: ?m.2075779
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v1 %v5; %v10 := op:or w %v9; %v11 := pair:%v4 %v8; %v12 := op:and w %v11 dsl_ret %v12 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), eval (Op.xor w) (eval (Op.or w) (eval (Op.const x) () id, eval (Op.const y) () id) id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.and w) (eval (Op.xor w) (eval (Op.const x) () id, eval (Op.const (-1)) () id) id, eval (Op.xor w) (eval (Op.const y) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), (x ||| y) ^^^ -1 = (x ^^^ -1) &&& (y ^^^ -1)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2443 -- precondition: true /- %nx = xor %x, -1 %op0 = ashr %nx, %y %r = xor %op0, -1 => %nx = xor %x, -1 %op0 = ashr %nx, %y %r = ashr %x, %y -/ theorem
alive_AndOrXor_2443: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_2443
: forall (w :
Nat: Type
Nat
) (
y: Bitvec w
y
x: Bitvec w
x
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2114855
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.2115111
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
y: Bitvec w
y
) %v0; %v6 := pair:%v4 %v5; %v7 := op:ashr w %v6; %v8 := op:const (-
1: ?m.2116153
1
) %v0; %v9 := pair:%v7 %v8; %v10 := op:xor w %v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2114855
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.2117079
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
y: Bitvec w
y
) %v0; %v6 := pair:%v4 %v5; %v7 := op:ashr w %v6; %v8 := pair:%v1 %v5; %v9 := op:ashr w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), eval (Op.xor w) (eval (Op.ashr w) (eval (Op.xor w) (eval (Op.const x) () id, eval (Op.const (-1)) () id) id, eval (Op.const y) () id) id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.ashr w) (eval (Op.const x) () id, eval (Op.const y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), sshr (x ^^^ -1) (Bitvec.toNat y) ^^^ -1 = sshr x (Bitvec.toNat y)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.ashr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2453 -- precondition: true /- %op0 = icmp slt %x, %y %r = xor %op0, -1 => %op0 = icmp slt %x, %y %r = icmp sge %x, %y -/ theorem
alive_AndOrXor_2453: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.slt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.slt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.sge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e
alive_AndOrXor_2453
: forall (w :
Nat: Type
Nat
) (
y: Bitvec w
y
x: Bitvec w
x
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2149952
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2149971
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
y: Bitvec w
y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp slt w %v3; %v5 := op:const (-
1: ?m.2150711
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor
1: ?m.2150951
1
%v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2149952
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2151366
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
y: Bitvec w
y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp slt w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp sge w %v5 dsl_ret %v6 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.slt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.slt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.sge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), eval (Op.xor 1) (eval (Op.icmp Comparison.slt w) (eval (Op.const x) () id, eval (Op.const y) () id) id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.icmp Comparison.sge w) (eval (Op.const x) () id, eval (Op.const y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.slt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.slt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.sge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), (x <ā‚› y) ^^^ -1 = (x ≄ₛ y)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (y x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.slt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.slt w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.sge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2475 -- precondition: true /- %op0 = sub C, %x %r = xor %op0, -1 => %op0 = sub C, %x %r = add %x, (-1 - C) -/ theorem
alive_AndOrXor_2475: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_2475
: forall (w :
Nat: Type
Nat
) (
x: Bitvec w
x
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2172931
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
C: Bitvec w
C
) %v0; %v2 := op:const (
x: Bitvec w
x
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (-
1: ?m.2173687
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2172931
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
C: Bitvec w
C
) %v0; %v2 := op:const (
x: Bitvec w
x
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (-
1: ?m.2175075
1
) %v0; %v6 := pair:%v5 %v1; %v7 := op:sub w %v6; %v8 := pair:%v2 %v7; %v9 := op:add w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), eval (Op.xor w) (eval (Op.sub w) (eval (Op.const C) () id, eval (Op.const x) () id) id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.add w) (eval (Op.const x) () id, eval (Op.sub w) (eval (Op.const (-1)) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), C - x ^^^ -1 = x + (-1 - C)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2486 -- precondition: true /- %op0 = add %x, C %r = xor %op0, -1 => %op0 = add %x, C %r = sub (-1 - C), %x -/ theorem
alive_AndOrXor_2486: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_2486
: forall (w :
Nat: Type
Nat
) (
x: Bitvec w
x
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2207214
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (-
1: ?m.2207970
1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:xor w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2207214
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (-
1: ?m.2209358
1
) %v0; %v6 := pair:%v5 %v2; %v7 := op:sub w %v6; %v8 := pair:%v7 %v1; %v9 := op:sub w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), eval (Op.xor w) (eval (Op.add w) (eval (Op.const x) () id, eval (Op.const C) () id) id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.sub w) (eval (Op.sub w) (eval (Op.const (-1)) () id, eval (Op.const C) () id) id, eval (Op.const x) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), x + C ^^^ -1 = -1 - C - x
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2581 (B|A)^B -> A & ~B -- precondition: true /- %op0 = or %a, %op1 %r = xor %op0, %op1 => %nop1 = xor %op1, -1 %op0 = or %a, %op1 %r = and %a, %nop1 -/ theorem
alive_AndOrXor_2581__BAB___A__B: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_2581__BAB___A__B
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
op1: Bitvec w
op1
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2241305
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
op1: Bitvec w
op1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or w %v3; %v5 := pair:%v4 %v2; %v6 := op:xor w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2241305
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
op1: Bitvec w
op1
) %v0; %v2 := op:const (-
1: ?m.2242766
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
a: Bitvec w
a
) %v0; %v6 := pair:%v5 %v1; %v7 := op:or w %v6; %v8 := pair:%v5 %v4; %v9 := op:and w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), eval (Op.xor w) (eval (Op.or w) (eval (Op.const a) () id, eval (Op.const op1) () id) id, eval (Op.const op1) () id) id āŠ‘ eval (Op.and w) (eval (Op.const a) () id, eval (Op.xor w) (eval (Op.const op1) () id, eval (Op.const (-1)) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), (a ||| op1) ^^^ op1 = a &&& (op1 ^^^ -1)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const op1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2587 (B&A)^A -> ~B & A -- precondition: true /- %op0 = and %a, %op1 %r = xor %op0, %op1 => %na = xor %a, -1 %op0 = and %a, %op1 %r = and %na, %op1 -/ theorem
alive_AndOrXor_2587__BAA___B__A: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_AndOrXor_2587__BAA___B__A
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
op1: Bitvec w
op1
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2275423
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
op1: Bitvec w
op1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v4 %v2; %v6 := op:xor w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2275423
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (-
1: ?m.2276884
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
op1: Bitvec w
op1
) %v0; %v6 := pair:%v1 %v5; %v7 := op:and w %v6; %v8 := pair:%v4 %v5; %v9 := op:and w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), eval (Op.xor w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const op1) () id) id, eval (Op.const op1) () id) id āŠ‘ eval (Op.and w) (eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const (-1)) () id) id, eval (Op.const op1) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), a &&& op1 ^^^ op1 = (a ^^^ -1) &&& op1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2595 -- precondition: true /- %op0 = and %a, %b %op1 = or %a, %b %r = xor %op0, %op1 => %op0 = and %a, %b %op1 = or %a, %b %r = xor %a, %b -/ theorem
alive_AndOrXor_2595: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AndOrXor_2595
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2308711
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:or w %v5; %v7 := pair:%v4 %v6; %v8 := op:xor w %v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2308711
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:or w %v5; %v7 := pair:%v1 %v2; %v8 := op:xor w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.xor w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.or w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), a &&& b ^^^ (a ||| b) = a ^^^ b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2607 -- precondition: true /- %na = xor %a, -1 %nb = xor %b, -1 %op0 = or %a, %nb %op1 = or %na, %b %r = xor %op0, %op1 => %na = xor %a, -1 %nb = xor %b, -1 %op0 = or %a, %nb %op1 = or %na, %b %r = xor %a, %b -/ theorem
alive_AndOrXor_2607: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
alive_AndOrXor_2607
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2335946
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (-
1: ?m.2336202
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := op:const (-
1: ?m.2336890
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v1 %v8; %v10 := op:or w %v9; %v11 := pair:%v4 %v5; %v12 := op:or w %v11; %v13 := pair:%v10 %v12; %v14 := op:xor w %v13 dsl_ret %v14 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2335946
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (-
1: ?m.2338873
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := op:const (-
1: ?m.2339566
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v1 %v8; %v10 := op:or w %v9; %v11 := pair:%v4 %v5; %v12 := op:or w %v11; %v13 := pair:%v1 %v5; %v14 := op:xor w %v13 dsl_ret %v14 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.xor w) (eval (Op.or w) (eval (Op.const a) () id, eval (Op.xor w) (eval (Op.const b) () id, eval (Op.const (-1)) () id) id) id, eval (Op.or w) (eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const (-1)) () id) id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), (a ||| b ^^^ -1) ^^^ (a ^^^ -1 ||| b) = a ^^^ b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2617 -- precondition: true /- %na = xor %a, -1 %nb = xor %b, -1 %op0 = and %a, %nb %op1 = and %na, %b %r = xor %op0, %op1 => %na = xor %a, -1 %nb = xor %b, -1 %op0 = and %a, %nb %op1 = and %na, %b %r = xor %a, %b -/ theorem
alive_AndOrXor_2617: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
alive_AndOrXor_2617
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2386677
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (-
1: ?m.2386933
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := op:const (-
1: ?m.2387621
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v1 %v8; %v10 := op:and w %v9; %v11 := pair:%v4 %v5; %v12 := op:and w %v11; %v13 := pair:%v10 %v12; %v14 := op:xor w %v13 dsl_ret %v14 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2386677
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (-
1: ?m.2389604
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := op:const (-
1: ?m.2390297
1
) %v0; %v7 := pair:%v5 %v6; %v8 := op:xor w %v7; %v9 := pair:%v1 %v8; %v10 := op:and w %v9; %v11 := pair:%v4 %v5; %v12 := op:and w %v11; %v13 := pair:%v1 %v5; %v14 := op:xor w %v13 dsl_ret %v14 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.xor w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.xor w) (eval (Op.const b) () id, eval (Op.const (-1)) () id) id) id, eval (Op.and w) (eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const (-1)) () id) id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), a &&& (b ^^^ -1) ^^^ (a ^^^ -1) &&& b = a ^^^ b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2627 -- precondition: true /- %op0 = xor %a, %c %op1 = or %a, %b %r = xor %op0, %op1 => %na = xor %a, -1 %and = and %na, %b %op0 = xor %a, %c %op1 = or %a, %b %r = xor %and, %c -/ theorem
alive_AndOrXor_2627: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a c_1 b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const c_1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const c_1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
alive_AndOrXor_2627
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
c: Bitvec w
c
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2436456
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
c: Bitvec w
c
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := pair:%v1 %v5; %v7 := op:or w %v6; %v8 := pair:%v4 %v7; %v9 := op:xor w %v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2436456
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (-
1: ?m.2438454
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
b: Bitvec w
b
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6; %v8 := op:const (
c: Bitvec w
c
) %v0; %v9 := pair:%v1 %v8; %v10 := op:xor w %v9; %v11 := pair:%v1 %v5; %v12 := op:or w %v11; %v13 := pair:%v7 %v8; %v14 := op:xor w %v13 dsl_ret %v14 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a c b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const c) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const c) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a c b : Bitvec w), eval (Op.xor w) (eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const c) () id) id, eval (Op.or w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.and w) (eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const (-1)) () id) id, eval (Op.const b) () id) id, eval (Op.const c) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a c b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const c) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const c) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a c b : Bitvec w), a ^^^ c ^^^ (a ||| b) = (a ^^^ -1) &&& b ^^^ c
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a c b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const c) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const b) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const c) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 12 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 14 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2647 -- precondition: true /- %op0 = and %a, %b %op1 = xor %a, %b %r = xor %op0, %op1 => %op0 = and %a, %b %op1 = xor %a, %b %r = or %a, %b -/ theorem
alive_AndOrXor_2647: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AndOrXor_2647
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2489322
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:xor w %v5; %v7 := pair:%v4 %v6; %v8 := op:xor w %v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2489322
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := pair:%v1 %v2; %v6 := op:xor w %v5; %v7 := pair:%v1 %v2; %v8 := op:or w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.xor w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.or w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), a &&& b ^^^ (a ^^^ b) = a ||| b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2658 -- precondition: true /- %nb = xor %b, -1 %op0 = and %a, %nb %na = xor %a, -1 %r = xor %op0, %na => %and = and %a, %b %nb = xor %b, -1 %op0 = and %a, %nb %na = xor %a, -1 %r = xor %and, -1 -/ theorem
alive_AndOrXor_2658: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) Context.Var.last) (TSSA.assign 15 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e
alive_AndOrXor_2658
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2516222
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
b: Bitvec w
b
) %v0; %v2 := op:const (-
1: ?m.2516478
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
a: Bitvec w
a
) %v0; %v6 := pair:%v5 %v4; %v7 := op:and w %v6; %v8 := op:const (-
1: ?m.2517520
1
) %v0; %v9 := pair:%v5 %v8; %v10 := op:xor w %v9; %v11 := pair:%v7 %v10; %v12 := op:xor w %v11 dsl_ret %v12 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2516222
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and w %v3; %v5 := op:const (-
1: ?m.2519320
1
) %v0; %v6 := pair:%v2 %v5; %v7 := op:xor w %v6; %v8 := pair:%v1 %v7; %v9 := op:and w %v8; %v10 := op:const (-
1: ?m.2520256
1
) %v0; %v11 := pair:%v1 %v10; %v12 := op:xor w %v11; %v13 := op:const (-
1: ?m.2520871
1
) %v0; %v14 := pair:%v4 %v13; %v15 := op:xor w %v14 dsl_ret %v15 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) Context.Var.last) (TSSA.assign 15 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.xor w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.xor w) (eval (Op.const b) () id, eval (Op.const (-1)) () id) id) id, eval (Op.xor w) (eval (Op.const a) () id, eval (Op.const (-1)) () id) id) id āŠ‘ eval (Op.xor w) (eval (Op.and w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.const (-1)) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) Context.Var.last) (TSSA.assign 15 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), a &&& (b ^^^ -1) ^^^ (a ^^^ -1) = a &&& b ^^^ -1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const b) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const a) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) Context.Var.last) (TSSA.assign 12 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))) TSSA.rgn0) (TSSA.assign 14 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) Context.Var.last) (TSSA.assign 15 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:AndOrXor:2663 -- precondition: true /- %op0 = icmp ule %a, %b %op1 = icmp ne %a, %b %r = xor %op0, %op1 => %op0 = icmp ule %a, %b %op1 = icmp ne %a, %b %r = icmp uge %a, %b -/ theorem
alive_AndOrXor_2663: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ule w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ule w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_AndOrXor_2663
: forall (w :
Nat: Type
Nat
) (
a: Bitvec w
a
b: Bitvec w
b
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2566002
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2566021
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp ule w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp ne w %v5; %v7 := pair:%v4 %v6; %v8 := op:xor
1: ?m.2567192
1
%v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2566002
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2567607
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec w
a
) %v0; %v2 := op:const (
b: Bitvec w
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:icmp ule w %v3; %v5 := pair:%v1 %v2; %v6 := op:icmp ne w %v5; %v7 := pair:%v1 %v2; %v8 := op:icmp uge w %v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ule w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ule w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), eval (Op.xor 1) (eval (Op.icmp Comparison.ule w) (eval (Op.const a) () id, eval (Op.const b) () id) id, eval (Op.icmp Comparison.ne w) (eval (Op.const a) () id, eval (Op.const b) () id) id) id āŠ‘ eval (Op.icmp Comparison.uge w) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ule w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ule w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), (a ≤ᵤ b) ^^^ ofBool (a != b) = (a ≄ᵤ b)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (a b : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ule w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.icmp Comparison.ule w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.icmp Comparison.ne w) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.icmp Comparison.uge w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:152 -- precondition: true /- %r = mul %x, -1 => %r = sub 0, %x -/ theorem
alive_152: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_152
: forall (w :
Nat: Type
Nat
) (
x: Bitvec w
x
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2591554
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec w
x
) %v0; %v2 := op:const (-
1: ?m.2591808
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:mul w %v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2591554
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.2592539
0
) %v0; %v2 := op:const (
x: Bitvec w
x
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x : Bitvec w), eval (Op.mul w) (eval (Op.const x) () id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const x) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x : Bitvec w), x * -1 = 0 - x
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (x : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const x) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:160 -- precondition: true /- %sh = shl i7 %x, C2 %r = mul %sh, C1 => %sh = shl i7 %x, C2 %r = mul %x, (C1 << C2) -/ theorem
alive_160: āˆ€ {c : Context BaseType} {e : EnvC c} (x C1 C2 : Bitvec 7), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_160
: forall (
x: Bitvec 7
x
C1: Bitvec 7
C1
C2: Bitvec 7
C2
:
Bitvec: ā„• → Type
Bitvec
7: ?m.2608846
7
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2608831
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
7: ?m.2608859
7
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec 7
x
) %v0; %v2 := op:const (
C2: Bitvec 7
C2
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
7: ?m.2609297
7
%v3; %v5 := op:const (
C1: Bitvec 7
C1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:mul
7: ?m.2609815
7
%v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2608831
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
7: ?m.2610230
7
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
x: Bitvec 7
x
) %v0; %v2 := op:const (
C2: Bitvec 7
C2
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
7: ?m.2610667
7
%v3; %v5 := op:const (
C1: Bitvec 7
C1
) %v0; %v6 := pair:%v5 %v2; %v7 := op:shl
7: ?m.2611195
7
%v6; %v8 := pair:%v1 %v7; %v9 := op:mul
7: ?m.2611583
7
%v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x C1 C2 : Bitvec 7), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x C1 C2 : Bitvec 7), eval (Op.mul 7) (eval (Op.shl 7) (eval (Op.const x) () id, eval (Op.const C2) () id) id, eval (Op.const C1) () id) id āŠ‘ eval (Op.mul 7) (eval (Op.const x) () id, eval (Op.shl 7) (eval (Op.const C1) () id, eval (Op.const C2) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x C1 C2 : Bitvec 7), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x C1 C2 : Bitvec 7), x <<< C2 * C1 = x * C1 <<< C2
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x C1 C2 : Bitvec 7), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const x) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:229 -- precondition: true /- %Op0 = add %X, C1 %r = mul %Op0, %Op1 => %mul = mul C1, %Op1 %tmp = mul %X, %Op1 %Op0 = add %X, C1 %r = add %tmp, %mul -/ theorem
alive_229: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C1 Op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 11 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_229
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C1: Bitvec w
C1
Op1: Bitvec w
Op1
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2642929
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C1: Bitvec w
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (
Op1: Bitvec w
Op1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:mul w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2642929
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
C1: Bitvec w
C1
) %v0; %v2 := op:const (
Op1: Bitvec w
Op1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:mul w %v3; %v5 := op:const (
X: Bitvec w
X
) %v0; %v6 := pair:%v5 %v2; %v7 := op:mul w %v6; %v8 := pair:%v5 %v1; %v9 := op:add w %v8; %v10 := pair:%v7 %v4; %v11 := op:add w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 Op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 11 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 Op1 : Bitvec w), eval (Op.mul w) (eval (Op.add w) (eval (Op.const X) () id, eval (Op.const C1) () id) id, eval (Op.const Op1) () id) id āŠ‘ eval (Op.add w) (eval (Op.mul w) (eval (Op.const X) () id, eval (Op.const Op1) () id) id, eval (Op.mul w) (eval (Op.const C1) () id, eval (Op.const Op1) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 Op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 11 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 Op1 : Bitvec w), (X + C1) * Op1 = X * Op1 + C1 * Op1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C1 Op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 9 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 11 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:239 -- precondition: true /- %a = sub 0, %X %b = sub 0, %Y %r = mul %a, %b => %a = sub 0, %X %b = sub 0, %Y %r = mul %X, %Y -/ theorem
alive_239: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 10 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
alive_239
: forall (w :
Nat: Type
Nat
) (
Y: Bitvec w
Y
X: Bitvec w
X
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2688946
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.2689060
0
) %v0; %v2 := op:const (
X: Bitvec w
X
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
0: ?m.2689722
0
) %v0; %v6 := op:const (
Y: Bitvec w
Y
) %v0; %v7 := pair:%v5 %v6; %v8 := op:sub w %v7; %v9 := pair:%v4 %v8; %v10 := op:mul w %v9 dsl_ret %v10 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2688946
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.2690918
0
) %v0; %v2 := op:const (
X: Bitvec w
X
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3; %v5 := op:const (
0: ?m.2691580
0
) %v0; %v6 := op:const (
Y: Bitvec w
Y
) %v0; %v7 := pair:%v5 %v6; %v8 := op:sub w %v7; %v9 := pair:%v2 %v6; %v10 := op:mul w %v9 dsl_ret %v10 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 10 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), eval (Op.mul w) (eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const X) () id) id, eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const Y) () id) id) id āŠ‘ eval (Op.mul w) (eval (Op.const X) () id, eval (Op.const Y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 10 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), (0 - X) * (0 - Y) = X * Y
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 8 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 10 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))) e

Goals accomplished! šŸ™
-- Name:275 -- precondition: true /- %div = udiv i5 %X, %Y %r = mul %div, %Y => %rem = urem %X, %Y %div = udiv i5 %X, %Y %r = sub %X, %rem -/ theorem
alive_275: āˆ€ {c : Context BaseType} {e : EnvC c} (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 8 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_275
: forall (
Y: Bitvec 5
Y
X: Bitvec 5
X
:
Bitvec: ā„• → Type
Bitvec
5: ?m.2722936
5
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2722926
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
5: ?m.2722949
5
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 5
X
) %v0; %v2 := op:const (
Y: Bitvec 5
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:udiv
5: ?m.2723387
5
%v3; %v5 := pair:%v4 %v2; %v6 := op:mul
5: ?m.2723749
5
%v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2722926
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
5: ?m.2724164
5
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 5
X
) %v0; %v2 := op:const (
Y: Bitvec 5
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:urem
5: ?m.2724601
5
%v3; %v5 := pair:%v1 %v2; %v6 := op:udiv
5: ?m.2724978
5
%v5; %v7 := pair:%v1 %v4; %v8 := op:sub
5: ?m.2725371
5
%v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 8 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), eval (Op.mul 5) (eval (Op.udiv 5) (eval (Op.const X) () id, eval (Op.const Y) () id) id, eval (Op.const Y) () id) id āŠ‘ eval (Op.sub 5) (eval (Op.const X) () id, eval (Op.urem 5) (eval (Op.const X) () id, eval (Op.const Y) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 8 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), (Option.bind (udiv? X Y) fun fst => some (fst * Y)) āŠ‘ Option.bind (urem? X Y) fun snd => some (X - snd)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 8 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:275-2 -- precondition: true /- %div = sdiv i5 %X, %Y %r = mul %div, %Y => %rem = srem %X, %Y %div = sdiv i5 %X, %Y %r = sub %X, %rem -/ theorem
alive_275_2: āˆ€ {c : Context BaseType} {e : EnvC c} (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 8 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_275_2
: forall (
Y: Bitvec 5
Y
X: Bitvec 5
X
:
Bitvec: ā„• → Type
Bitvec
5: ?m.2749053
5
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2749043
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
5: ?m.2749066
5
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 5
X
) %v0; %v2 := op:const (
Y: Bitvec 5
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sdiv
5: ?m.2749504
5
%v3; %v5 := pair:%v4 %v2; %v6 := op:mul
5: ?m.2749866
5
%v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2749043
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
5: ?m.2750281
5
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 5
X
) %v0; %v2 := op:const (
Y: Bitvec 5
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:srem
5: ?m.2750718
5
%v3; %v5 := pair:%v1 %v2; %v6 := op:sdiv
5: ?m.2751095
5
%v5; %v7 := pair:%v1 %v4; %v8 := op:sub
5: ?m.2751488
5
%v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 8 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), eval (Op.mul 5) (eval (Op.sdiv 5) (eval (Op.const X) () id, eval (Op.const Y) () id) id, eval (Op.const Y) () id) id āŠ‘ eval (Op.sub 5) (eval (Op.const X) () id, eval (Op.urem 5) (eval (Op.const X) () id, eval (Op.const Y) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 8 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), (Option.bind (sdiv? X Y) fun fst => some (fst * Y)) āŠ‘ Option.bind (urem? X Y) fun snd => some (X - snd)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 8 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:276 -- precondition: true /- %div = sdiv i5 %X, %Y %negY = sub 0, %Y %r = mul %div, %negY => %rem = srem %X, %Y %div = sdiv i5 %X, %Y %negY = sub 0, %Y %r = sub %rem, %X -/ theorem
alive_276: āˆ€ {c : Context BaseType} {e : EnvC c} (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_276
: forall (
Y: Bitvec 5
Y
X: Bitvec 5
X
:
Bitvec: ā„• → Type
Bitvec
5: ?m.2775739
5
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2775729
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
5: ?m.2775752
5
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 5
X
) %v0; %v2 := op:const (
Y: Bitvec 5
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sdiv
5: ?m.2776190
5
%v3; %v5 := op:const (
0: ?m.2776494
0
) %v0; %v6 := pair:%v5 %v2; %v7 := op:sub
5: ?m.2776739
5
%v6; %v8 := pair:%v4 %v7; %v9 := op:mul
5: ?m.2777106
5
%v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2775729
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
5: ?m.2777521
5
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 5
X
) %v0; %v2 := op:const (
Y: Bitvec 5
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:srem
5: ?m.2777958
5
%v3; %v5 := pair:%v1 %v2; %v6 := op:sdiv
5: ?m.2778335
5
%v5; %v7 := op:const (
0: ?m.2778639
0
) %v0; %v8 := pair:%v7 %v2; %v9 := op:sub
5: ?m.2778904
5
%v8; %v10 := pair:%v4 %v1; %v11 := op:sub
5: ?m.2779327
5
%v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), eval (Op.mul 5) (eval (Op.sdiv 5) (eval (Op.const X) () id, eval (Op.const Y) () id) id, eval (Op.sub 5) (eval (Op.const 0) () id, eval (Op.const Y) () id) id) id āŠ‘ eval (Op.sub 5) (eval (Op.urem 5) (eval (Op.const X) () id, eval (Op.const Y) () id) id, eval (Op.const X) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), (Option.bind (sdiv? X Y) fun fst => some (fst * (0 - Y))) āŠ‘ Option.bind (urem? X Y) fun fst => some (fst - X)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.sdiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:276-2 -- precondition: true /- %div = udiv i5 %X, %Y %negY = sub 0, %Y %r = mul %div, %negY => %rem = urem %X, %Y %div = udiv i5 %X, %Y %negY = sub 0, %Y %r = sub %rem, %X -/ theorem
alive_276_2: āˆ€ {c : Context BaseType} {e : EnvC c} (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_276_2
: forall (
Y: Bitvec 5
Y
X: Bitvec 5
X
:
Bitvec: ā„• → Type
Bitvec
5: ?m.2808607
5
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2808597
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
5: ?m.2808620
5
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 5
X
) %v0; %v2 := op:const (
Y: Bitvec 5
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:udiv
5: ?m.2809058
5
%v3; %v5 := op:const (
0: ?m.2809362
0
) %v0; %v6 := pair:%v5 %v2; %v7 := op:sub
5: ?m.2809607
5
%v6; %v8 := pair:%v4 %v7; %v9 := op:mul
5: ?m.2809974
5
%v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2808597
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
5: ?m.2810389
5
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 5
X
) %v0; %v2 := op:const (
Y: Bitvec 5
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:urem
5: ?m.2810826
5
%v3; %v5 := pair:%v1 %v2; %v6 := op:udiv
5: ?m.2811203
5
%v5; %v7 := op:const (
0: ?m.2811507
0
) %v0; %v8 := pair:%v7 %v2; %v9 := op:sub
5: ?m.2811772
5
%v8; %v10 := pair:%v4 %v1; %v11 := op:sub
5: ?m.2812195
5
%v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), eval (Op.mul 5) (eval (Op.udiv 5) (eval (Op.const X) () id, eval (Op.const Y) () id) id, eval (Op.sub 5) (eval (Op.const 0) () id, eval (Op.const Y) () id) id) id āŠ‘ eval (Op.sub 5) (eval (Op.urem 5) (eval (Op.const X) () id, eval (Op.const Y) () id) id, eval (Op.const X) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), (Option.bind (udiv? X Y) fun fst => some (fst * (0 - Y))) āŠ‘ Option.bind (urem? X Y) fun fst => some (fst - X)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 5), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 5) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.udiv 5) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.op (Op.const 0) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 5) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:283 -- precondition: true /- %r = mul i1 %X, %Y => %r = and %X, %Y -/ theorem
alive_283: āˆ€ {c : Context BaseType} {e : EnvC c} (Y X : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_283
: forall (
Y: Bitvec 1
Y
X: Bitvec 1
X
:
Bitvec: ā„• → Type
Bitvec
1: ?m.2840539
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2840529
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2840552
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 1
X
) %v0; %v2 := op:const (
Y: Bitvec 1
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:mul
1: ?m.2840990
1
%v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2840529
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2841405
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 1
X
) %v0; %v2 := op:const (
Y: Bitvec 1
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and
1: ?m.2841842
1
%v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 1), eval (Op.mul 1) (eval (Op.const X) () id, eval (Op.const Y) () id) id āŠ‘ eval (Op.and 1) (eval (Op.const X) () id, eval (Op.const Y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 1), X * Y = X &&& Y
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:290 & 292 -- precondition: true /- %Op0 = shl 1, %Y %r = mul %Op0, %Op1 => %Op0 = shl 1, %Y %r = shl %Op1, %Y -/ theorem
alive_290__292: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (Y Op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_290__292
: forall (w :
Nat: Type
Nat
) (
Y: Bitvec w
Y
Op1: Bitvec w
Op1
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2854253
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
1: ?m.2854367
1
) %v0; %v2 := op:const (
Y: Bitvec w
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3; %v5 := op:const (
Op1: Bitvec w
Op1
) %v0; %v6 := pair:%v4 %v5; %v7 := op:mul w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2854253
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
1: ?m.2855749
1
) %v0; %v2 := op:const (
Y: Bitvec w
Y
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3; %v5 := op:const (
Op1: Bitvec w
Op1
) %v0; %v6 := pair:%v5 %v2; %v7 := op:shl w %v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y Op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y Op1 : Bitvec w), eval (Op.mul w) (eval (Op.shl w) (eval (Op.const 1) () id, eval (Op.const Y) () id) id, eval (Op.const Op1) () id) id āŠ‘ eval (Op.shl w) (eval (Op.const Op1) () id, eval (Op.const Y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y Op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y Op1 : Bitvec w), 1 <<< Y * Op1 = Op1 <<< Y
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y Op1 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.mul w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Y) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Op1) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:820 -- precondition: true /- %Z = srem i9 %X, %Op1 %Op0 = sub %X, %Z %r = sdiv %Op0, %Op1 => %Z = srem i9 %X, %Op1 %Op0 = sub %X, %Z %r = sdiv %X, %Op1 -/ theorem
alive_820: āˆ€ {c : Context BaseType} {e : EnvC c} (X Op1 : Bitvec 9), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.sdiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.sdiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_820
: forall (
X: Bitvec 9
X
Op1: Bitvec 9
Op1
:
Bitvec: ā„• → Type
Bitvec
9: ?m.2880548
9
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2880538
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
9: ?m.2880561
9
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 9
X
) %v0; %v2 := op:const (
Op1: Bitvec 9
Op1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:srem
9: ?m.2880999
9
%v3; %v5 := pair:%v1 %v4; %v6 := op:sub
9: ?m.2881366
9
%v5; %v7 := pair:%v6 %v2; %v8 := op:sdiv
9: ?m.2881738
9
%v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2880538
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
9: ?m.2882153
9
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 9
X
) %v0; %v2 := op:const (
Op1: Bitvec 9
Op1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:srem
9: ?m.2882590
9
%v3; %v5 := pair:%v1 %v4; %v6 := op:sub
9: ?m.2882957
9
%v5; %v7 := pair:%v1 %v2; %v8 := op:sdiv
9: ?m.2883354
9
%v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.sdiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.sdiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), eval (Op.sdiv 9) (eval (Op.sub 9) (eval (Op.const X) () id, eval (Op.urem 9) (eval (Op.const X) () id, eval (Op.const Op1) () id) id) id, eval (Op.const Op1) () id) id āŠ‘ eval (Op.sdiv 9) (eval (Op.const X) () id, eval (Op.const Op1) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.sdiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.sdiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), (Option.bind (Option.bind (urem? X Op1) fun snd => some (X - snd)) fun fst => sdiv? fst Op1) āŠ‘ sdiv? X Op1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.sdiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.sdiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:820' -- precondition: true /- %Z = urem i9 %X, %Op1 %Op0 = sub %X, %Z %r = udiv %Op0, %Op1 => %Z = urem i9 %X, %Op1 %Op0 = sub %X, %Z %r = udiv %X, %Op1 -/ theorem
alive_820': āˆ€ {c : Context BaseType} {e : EnvC c} (X Op1 : Bitvec 9), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.udiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.udiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
alive_820'
: forall (
X: Bitvec 9
X
Op1: Bitvec 9
Op1
:
Bitvec: ā„• → Type
Bitvec
9: ?m.2907516
9
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2907506
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
9: ?m.2907529
9
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 9
X
) %v0; %v2 := op:const (
Op1: Bitvec 9
Op1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:urem
9: ?m.2907967
9
%v3; %v5 := pair:%v1 %v4; %v6 := op:sub
9: ?m.2908334
9
%v5; %v7 := pair:%v6 %v2; %v8 := op:udiv
9: ?m.2908706
9
%v7 dsl_ret %v8 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2907506
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
9: ?m.2909121
9
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 9
X
) %v0; %v2 := op:const (
Op1: Bitvec 9
Op1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:urem
9: ?m.2909558
9
%v3; %v5 := pair:%v1 %v4; %v6 := op:sub
9: ?m.2909925
9
%v5; %v7 := pair:%v1 %v2; %v8 := op:udiv
9: ?m.2910322
9
%v7 dsl_ret %v8 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.udiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.udiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), eval (Op.udiv 9) (eval (Op.sub 9) (eval (Op.const X) () id, eval (Op.urem 9) (eval (Op.const X) () id, eval (Op.const Op1) () id) id) id, eval (Op.const Op1) () id) id āŠ‘ eval (Op.udiv 9) (eval (Op.const X) () id, eval (Op.const Op1) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.udiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.udiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), (Option.bind (Option.bind (urem? X Op1) fun snd => some (X - snd)) fun fst => udiv? fst Op1) āŠ‘ udiv? X Op1
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X Op1 : Bitvec 9), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.udiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const Op1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.urem 9) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 6 (TSSA.op (Op.sub 9) Context.Var.last TSSA.rgn0) (TSSA.assign 7 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.udiv 9) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))) e

Goals accomplished! šŸ™
-- Name:891 -- precondition: true /- %s = shl i13 1, %N %r = udiv %x, %s => %s = shl i13 1, %N %r = lshr %x, %N -/ theorem
alive_891: āˆ€ {c : Context BaseType} {e : EnvC c} (x N : Bitvec 13), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const N) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 13) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.udiv 13) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const N) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 13) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr 13) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_891
: forall (
x: Bitvec 13
x
N: Bitvec 13
N
:
Bitvec: ā„• → Type
Bitvec
13: ?m.2934287
13
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2934277
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
13: ?m.2934300
13
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
1: ?m.2934398
1
) %v0; %v2 := op:const (
N: Bitvec 13
N
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
13: ?m.2934759
13
%v3; %v5 := op:const (
x: Bitvec 13
x
) %v0; %v6 := pair:%v5 %v4; %v7 := op:udiv
13: ?m.2935277
13
%v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2934277
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
13: ?m.2935692
13
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
1: ?m.2935789
1
) %v0; %v2 := op:const (
N: Bitvec 13
N
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
13: ?m.2936150
13
%v3; %v5 := op:const (
x: Bitvec 13
x
) %v0; %v6 := pair:%v5 %v2; %v7 := op:lshr
13: ?m.2936678
13
%v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x N : Bitvec 13), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const N) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 13) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.udiv 13) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const N) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 13) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr 13) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x N : Bitvec 13), eval (Op.udiv 13) (eval (Op.const x) () id, eval (Op.shl 13) (eval (Op.const 1) () id, eval (Op.const N) () id) id) id āŠ‘ eval (Op.lshr 13) (eval (Op.const x) () id, eval (Op.const N) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x N : Bitvec 13), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const N) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 13) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.udiv 13) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const N) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 13) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr 13) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x N : Bitvec 13), udiv? x (1 <<< N) āŠ‘ some (x >>> N)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (x N : Bitvec 13), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const N) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 13) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.udiv 13) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const N) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 13) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const x) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr 13) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:1030 -- precondition: true /- %r = sdiv %X, -1 => %r = sub 0, %X -/ theorem
alive_1030: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_1030
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2957769
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (-
1: ?m.2958023
1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sdiv w %v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2957769
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
0: ?m.2958754
0
) %v0; %v2 := op:const (
X: Bitvec w
X
) %v0; %v3 := pair:%v1 %v2; %v4 := op:sub w %v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X : Bitvec w), eval (Op.sdiv w) (eval (Op.const X) () id, eval (Op.const (-1)) () id) id āŠ‘ eval (Op.sub w) (eval (Op.const 0) () id, eval (Op.const X) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X : Bitvec w), sdiv? X (-1) āŠ‘ some (0 - X)
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (-1)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sdiv w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const 0) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.sub w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:Select:846 -- precondition: true /- %A = select i1 %B, true, %C => %A = or %B, %C -/ theorem
alive_Select_846: āˆ€ {c : Context BaseType} {e : EnvC c} (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_Select_846
: forall (
C: Bitvec 1
C
B: Bitvec 1
B
:
Bitvec: ā„• → Type
Bitvec
1: ?m.2974771
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2974761
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2974784
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec 1
B
) %v0; %v2 := op:const (↑
true: Bool
true
) %v0; %v3 := op:const (
C: Bitvec 1
C
) %v0; %v4 := triple:%v1 %v2 %v3; %v5 := op:select
1: ?m.2975445
1
%v4 dsl_ret %v5 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2974761
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2975940
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec 1
B
) %v0; %v2 := op:const (
C: Bitvec 1
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or
1: ?m.2976377
1
%v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), eval (Op.select 1) (eval (Op.const B) () id, eval (Op.const (ofBool true)) () id, eval (Op.const C) () id) id āŠ‘ eval (Op.or 1) (eval (Op.const B) () id, eval (Op.const C) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), select B (ofBool true) C = B ||| C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:Select:850 -- precondition: true /- %A = select i1 %B, false, %C => %notb = xor i1 %B, true %A = and %notb, %C -/ theorem
alive_Select_850: āˆ€ {c : Context BaseType} {e : EnvC c} (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_Select_850
: forall (
C: Bitvec 1
C
B: Bitvec 1
B
:
Bitvec: ā„• → Type
Bitvec
1: ?m.2999003
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2998998
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.2999021
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec 1
B
) %v0; %v2 := op:const (↑
false: Bool
false
) %v0; %v3 := op:const (
C: Bitvec 1
C
) %v0; %v4 := triple:%v1 %v2 %v3; %v5 := op:select
1: ?m.2999682
1
%v4 dsl_ret %v5 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.2998998
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3000177
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec 1
B
) %v0; %v2 := op:const (↑
true: Bool
true
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor
1: ?m.3000671
1
%v3; %v5 := op:const (
C: Bitvec 1
C
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and
1: ?m.3001198
1
%v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), eval (Op.select 1) (eval (Op.const B) () id, eval (Op.const (ofBool false)) () id, eval (Op.const C) () id) id āŠ‘ eval (Op.and 1) (eval (Op.xor 1) (eval (Op.const B) () id, eval (Op.const (ofBool true)) () id) id, eval (Op.const C) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), select B (ofBool false) C = (B ^^^ ofBool true) &&& C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:Select:855 -- precondition: true /- %A = select i1 %B, %C, false => %A = and %B, %C -/ theorem
alive_Select_855: āˆ€ {c : Context BaseType} {e : EnvC c} (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_Select_855
: forall (
C: Bitvec 1
C
B: Bitvec 1
B
:
Bitvec: ā„• → Type
Bitvec
1: ?m.3029826
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3029816
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3029839
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec 1
B
) %v0; %v2 := op:const (
C: Bitvec 1
C
) %v0; %v3 := op:const (↑
false: Bool
false
) %v0; %v4 := triple:%v1 %v2 %v3; %v5 := op:select
1: ?m.3030500
1
%v4 dsl_ret %v5 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3029816
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3030995
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec 1
B
) %v0; %v2 := op:const (
C: Bitvec 1
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and
1: ?m.3031432
1
%v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), eval (Op.select 1) (eval (Op.const B) () id, eval (Op.const C) () id, eval (Op.const (ofBool false)) () id) id āŠ‘ eval (Op.and 1) (eval (Op.const B) () id, eval (Op.const C) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), select B C (ofBool false) = B &&& C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const (ofBool false)) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:Select:859 -- precondition: true /- %A = select i1 %B, %C, true => %notb = xor i1 %B, true %A = or %notb, %C -/ theorem
alive_Select_859: āˆ€ {c : Context BaseType} {e : EnvC c} (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
alive_Select_859
: forall (
C: Bitvec 1
C
B: Bitvec 1
B
:
Bitvec: ā„• → Type
Bitvec
1: ?m.3053958
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3053948
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3053971
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec 1
B
) %v0; %v2 := op:const (
C: Bitvec 1
C
) %v0; %v3 := op:const (↑
true: Bool
true
) %v0; %v4 := triple:%v1 %v2 %v3; %v5 := op:select
1: ?m.3054632
1
%v4 dsl_ret %v5 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3053948
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3055127
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
B: Bitvec 1
B
) %v0; %v2 := op:const (↑
true: Bool
true
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor
1: ?m.3055621
1
%v3; %v5 := op:const (
C: Bitvec 1
C
) %v0; %v6 := pair:%v4 %v5; %v7 := op:or
1: ?m.3056148
1
%v6 dsl_ret %v7 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), eval (Op.select 1) (eval (Op.const B) () id, eval (Op.const C) () id, eval (Op.const (ofBool true)) () id) id āŠ‘ eval (Op.or 1) (eval (Op.xor 1) (eval (Op.const B) () id, eval (Op.const (ofBool true)) () id) id, eval (Op.const C) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), select B C (ofBool true) = B ^^^ ofBool true ||| C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (C B : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const B) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const (ofBool true)) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor 1) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e

Goals accomplished! šŸ™
-- Name:Select:851 -- precondition: true /- %r = select i1 %a, %b, %a => %r = and %a, %b -/ theorem
alive_Select_851: āˆ€ {c : Context BaseType} {e : EnvC c} (a b : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.triple (Context.Var.prev Context.Var.last) Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 4 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_Select_851
: forall (
a: Bitvec 1
a
b: Bitvec 1
b
:
Bitvec: ā„• → Type
Bitvec
1: ?m.3084340
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3084330
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3084353
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec 1
a
) %v0; %v2 := op:const (
b: Bitvec 1
b
) %v0; %v3 := triple:%v1 %v2 %v1; %v4 := op:select
1: ?m.3084801
1
%v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3084330
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3085216
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec 1
a
) %v0; %v2 := op:const (
b: Bitvec 1
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:and
1: ?m.3085653
1
%v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.triple (Context.Var.prev Context.Var.last) Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 4 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), eval (Op.select 1) (eval (Op.const a) () id, eval (Op.const b) () id, eval (Op.const a) () id) id āŠ‘ eval (Op.and 1) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.triple (Context.Var.prev Context.Var.last) Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 4 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), select a b a = a &&& b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.triple (Context.Var.prev Context.Var.last) Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 4 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.and 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:Select:852 -- precondition: true /- %r = select i1 %a, %a, %b => %r = or %a, %b -/ theorem
alive_Select_852: āˆ€ {c : Context BaseType} {e : EnvC c} (a b : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.triple (Context.Var.prev Context.Var.last) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
alive_Select_852
: forall (
a: Bitvec 1
a
b: Bitvec 1
b
:
Bitvec: ā„• → Type
Bitvec
1: ?m.3108338
1
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3108333
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3108356
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec 1
a
) %v0; %v2 := op:const (
b: Bitvec 1
b
) %v0; %v3 := triple:%v1 %v1 %v2; %v4 := op:select
1: ?m.3108804
1
%v3 dsl_ret %v4 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3108333
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
1: ?m.3109219
1
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
a: Bitvec 1
a
) %v0; %v2 := op:const (
b: Bitvec 1
b
) %v0; %v3 := pair:%v1 %v2; %v4 := op:or
1: ?m.3109656
1
%v3 dsl_ret %v4 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.triple (Context.Var.prev Context.Var.last) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), eval (Op.select 1) (eval (Op.const a) () id, eval (Op.const a) () id, eval (Op.const b) () id) id āŠ‘ eval (Op.or 1) (eval (Op.const a) () id, eval (Op.const b) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.triple (Context.Var.prev Context.Var.last) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), select a a b = a ||| b
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (a b : Bitvec 1), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.triple (Context.Var.prev Context.Var.last) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.select 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const a) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const b) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.or 1) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))) e

Goals accomplished! šŸ™
-- Name:Select:1100 -- precondition: true /- %r = select i1 true, %X, %Y => %r = %X -/ theorem
alive_Select_1100: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (ofBool true)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.copy w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))) e
alive_Select_1100
: forall (w :
Nat: Type
Nat
) (
Y: Bitvec w
Y
X: Bitvec w
X
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3129583
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (↑
true: Bool
true
) %v0; %v2 := op:const (
X: Bitvec w
X
) %v0; %v3 := op:const (
Y: Bitvec w
Y
) %v0; %v4 := triple:%v1 %v2 %v3; %v5 := op:select w %v4 dsl_ret %v5 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3129583
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:copy w %v1 dsl_ret %v2 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (ofBool true)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.copy w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), eval (Op.select w) (eval (Op.const (ofBool true)) () id, eval (Op.const X) () id, eval (Op.const Y) () id) id āŠ‘ eval (Op.copy w) (eval (Op.const X) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (ofBool true)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.copy w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), select (ofBool true) X Y = X
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (ofBool true)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.copy w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))) e

Goals accomplished! šŸ™
-- Name:Select:1105 -- precondition: true /- %r = select i1 false, %X, %Y => %r = %Y -/ theorem
alive_Select_1105: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (ofBool false)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.copy w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))) e
alive_Select_1105
: forall (w :
Nat: Type
Nat
) (
Y: Bitvec w
Y
X: Bitvec w
X
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3151615
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (↑
false: Bool
false
) %v0; %v2 := op:const (
X: Bitvec w
X
) %v0; %v3 := op:const (
Y: Bitvec w
Y
) %v0; %v4 := triple:%v1 %v2 %v3; %v5 := op:select w %v4 dsl_ret %v5 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3151615
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
Y: Bitvec w
Y
) %v0; %v2 := op:copy w %v1 dsl_ret %v2 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (ofBool false)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.copy w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), eval (Op.select w) (eval (Op.const (ofBool false)) () id, eval (Op.const X) () id, eval (Op.const Y) () id) id āŠ‘ eval (Op.copy w) (eval (Op.const Y) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (ofBool false)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.copy w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), select (ofBool false) X Y = Y
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const (ofBool false)) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const X) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.triple (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.select w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.copy w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 239 -- precondition: true /- %Op0 = shl %X, C %r = lshr %Op0, C => %Op0 = shl %X, C %r = and %X, (-1 u>> C) -/ theorem
alive_InstCombineShift__239: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_InstCombineShift__239
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3173680
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3; %v5 := pair:%v4 %v2; %v6 := op:lshr w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3173680
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3; %v5 := op:const (-
1: ?m.3175641
1
) %v0; %v6 := pair:%v5 %v2; %v7 := op:lshr w %v6; %v8 := pair:%v1 %v7; %v9 := op:and w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), eval (Op.lshr w) (eval (Op.shl w) (eval (Op.const X) () id, eval (Op.const C) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.and w) (eval (Op.const X) () id, eval (Op.lshr w) (eval (Op.const (-1)) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), X <<< C >>> C = X &&& (-1) >>> C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 279 -- precondition: true /- %Op0 = lshr %X, C %r = shl %Op0, C => %Op0 = lshr %X, C %r = and %X, (-1 << C) -/ theorem
alive_InstCombineShift__279: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_InstCombineShift__279
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3207594
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:lshr w %v3; %v5 := pair:%v4 %v2; %v6 := op:shl w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3207594
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:lshr w %v3; %v5 := op:const (-
1: ?m.3209555
1
) %v0; %v6 := pair:%v5 %v2; %v7 := op:shl w %v6; %v8 := pair:%v1 %v7; %v9 := op:and w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), eval (Op.shl w) (eval (Op.lshr w) (eval (Op.const X) () id, eval (Op.const C) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.and w) (eval (Op.const X) () id, eval (Op.shl w) (eval (Op.const (-1)) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), X >>> C <<< C = X &&& (-1) <<< C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 351 -- precondition: true /- %Op0 = mul i7 %X, C1 %r = shl %Op0, C2 => %Op0 = mul i7 %X, C1 %r = mul %X, (C1 << C2) -/ theorem
alive_InstCombineShift__351: āˆ€ {c : Context BaseType} {e : EnvC c} (X C1 C2 : Bitvec 7), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_InstCombineShift__351
: forall (
X: Bitvec 7
X
C1: Bitvec 7
C1
C2: Bitvec 7
C2
:
Bitvec: ā„• → Type
Bitvec
7: ?m.3241693
7
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3241688
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
7: ?m.3241716
7
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 7
X
) %v0; %v2 := op:const (
C1: Bitvec 7
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:mul
7: ?m.3242154
7
%v3; %v5 := op:const (
C2: Bitvec 7
C2
) %v0; %v6 := pair:%v4 %v5; %v7 := op:shl
7: ?m.3242672
7
%v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3241688
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
7: ?m.3243087
7
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 7
X
) %v0; %v2 := op:const (
C1: Bitvec 7
C1
) %v0; %v3 := pair:%v1 %v2; %v4 := op:mul
7: ?m.3243524
7
%v3; %v5 := op:const (
C2: Bitvec 7
C2
) %v0; %v6 := pair:%v2 %v5; %v7 := op:shl
7: ?m.3244052
7
%v6; %v8 := pair:%v1 %v7; %v9 := op:mul
7: ?m.3244440
7
%v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X C1 C2 : Bitvec 7), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X C1 C2 : Bitvec 7), eval (Op.shl 7) (eval (Op.mul 7) (eval (Op.const X) () id, eval (Op.const C1) () id) id, eval (Op.const C2) () id) id āŠ‘ eval (Op.mul 7) (eval (Op.const X) () id, eval (Op.shl 7) (eval (Op.const C1) () id, eval (Op.const C2) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X C1 C2 : Bitvec 7), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X C1 C2 : Bitvec 7), (X * C1) <<< C2 = X * C1 <<< C2
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (X C1 C2 : Bitvec 7), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C1) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 7) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.mul 7) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 422-1 -- precondition: true /- %Op1 = lshr i31 %X, C %Op0 = add %Y, %Op1 %r = shl %Op0, C => %s = shl %Y, C %a = add %s, %X %Op1 = lshr i31 %X, C %Op0 = add %Y, %Op1 %r = and %a, (-1 << C) -/ theorem
alive_InstCombineShift__422_1: āˆ€ {c : Context BaseType} {e : EnvC c} (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.lshr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
alive_InstCombineShift__422_1
: forall (
Y: Bitvec 31
Y
X: Bitvec 31
X
C: Bitvec 31
C
:
Bitvec: ā„• → Type
Bitvec
31: ?m.3275173
31
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3275168
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
31: ?m.3275196
31
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 31
X
) %v0; %v2 := op:const (
C: Bitvec 31
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:lshr
31: ?m.3275634
31
%v3; %v5 := op:const (
Y: Bitvec 31
Y
) %v0; %v6 := pair:%v5 %v4; %v7 := op:add
31: ?m.3276152
31
%v6; %v8 := pair:%v7 %v2; %v9 := op:shl
31: ?m.3276529
31
%v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3275168
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
31: ?m.3276944
31
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
Y: Bitvec 31
Y
) %v0; %v2 := op:const (
C: Bitvec 31
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
31: ?m.3277381
31
%v3; %v5 := op:const (
X: Bitvec 31
X
) %v0; %v6 := pair:%v4 %v5; %v7 := op:add
31: ?m.3277899
31
%v6; %v8 := pair:%v5 %v2; %v9 := op:lshr
31: ?m.3278286
31
%v8; %v10 := pair:%v1 %v9; %v11 := op:add
31: ?m.3278684
31
%v10; %v12 := op:const (-
1: ?m.3278992
1
) %v0; %v13 := pair:%v12 %v2; %v14 := op:shl
31: ?m.3279321
31
%v13; %v15 := pair:%v7 %v14; %v16 := op:and
31: ?m.3279717
31
%v15 dsl_ret %v16 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.lshr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), eval (Op.shl 31) (eval (Op.add 31) (eval (Op.const Y) () id, eval (Op.lshr 31) (eval (Op.const X) () id, eval (Op.const C) () id) id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.and 31) (eval (Op.add 31) (eval (Op.shl 31) (eval (Op.const Y) () id, eval (Op.const C) () id) id, eval (Op.const X) () id) id, eval (Op.shl 31) (eval (Op.const (-1)) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.lshr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), (Y + X >>> C) <<< C = Y <<< C + X &&& (-1) <<< C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.lshr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 422-2 -- precondition: true /- %Op1 = ashr i31 %X, C %Op0 = add %Y, %Op1 %r = shl %Op0, C => %s = shl %Y, C %a = add %s, %X %Op1 = ashr i31 %X, C %Op0 = add %Y, %Op1 %r = and %a, (-1 << C) -/ theorem
alive_InstCombineShift__422_2: āˆ€ {c : Context BaseType} {e : EnvC c} (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
alive_InstCombineShift__422_2
: forall (
Y: Bitvec 31
Y
X: Bitvec 31
X
C: Bitvec 31
C
:
Bitvec: ā„• → Type
Bitvec
31: ?m.3332385
31
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3332380
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
31: ?m.3332408
31
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 31
X
) %v0; %v2 := op:const (
C: Bitvec 31
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:ashr
31: ?m.3332846
31
%v3; %v5 := op:const (
Y: Bitvec 31
Y
) %v0; %v6 := pair:%v5 %v4; %v7 := op:add
31: ?m.3333364
31
%v6; %v8 := pair:%v7 %v2; %v9 := op:shl
31: ?m.3333741
31
%v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3332380
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
31: ?m.3334156
31
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
Y: Bitvec 31
Y
) %v0; %v2 := op:const (
C: Bitvec 31
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
31: ?m.3334593
31
%v3; %v5 := op:const (
X: Bitvec 31
X
) %v0; %v6 := pair:%v4 %v5; %v7 := op:add
31: ?m.3335111
31
%v6; %v8 := pair:%v5 %v2; %v9 := op:ashr
31: ?m.3335498
31
%v8; %v10 := pair:%v1 %v9; %v11 := op:add
31: ?m.3335896
31
%v10; %v12 := op:const (-
1: ?m.3336204
1
) %v0; %v13 := pair:%v12 %v2; %v14 := op:shl
31: ?m.3336533
31
%v13; %v15 := pair:%v7 %v14; %v16 := op:and
31: ?m.3336929
31
%v15 dsl_ret %v16 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), eval (Op.shl 31) (eval (Op.add 31) (eval (Op.const Y) () id, eval (Op.ashr 31) (eval (Op.const X) () id, eval (Op.const C) () id) id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.and 31) (eval (Op.add 31) (eval (Op.shl 31) (eval (Op.const Y) () id, eval (Op.const C) () id) id, eval (Op.const X) () id) id, eval (Op.shl 31) (eval (Op.const (-1)) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), (Y + sshr X (Bitvec.toNat C)) <<< C = Y <<< C + X &&& (-1) <<< C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 440 -- precondition: true /- %s = lshr %X, C %Op1 = and %s, C2 %Op0 = xor %Y, %Op1 %r = shl %Op0, C => %a = and %X, (C2 << C) %y2 = shl %Y, C %s = lshr %X, C %Op1 = and %s, C2 %Op0 = xor %Y, %Op1 %r = xor %a, %y2 -/ theorem
alive_InstCombineShift__440: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (Y X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 10 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 12 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 17 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 18 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))) e
alive_InstCombineShift__440
: forall (w :
Nat: Type
Nat
) (
Y: Bitvec w
Y
X: Bitvec w
X
C: Bitvec w
C
C2: Bitvec w
C2
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3390110
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:lshr w %v3; %v5 := op:const (
C2: Bitvec w
C2
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6; %v8 := op:const (
Y: Bitvec w
Y
) %v0; %v9 := pair:%v8 %v7; %v10 := op:xor w %v9; %v11 := pair:%v10 %v2; %v12 := op:shl w %v11 dsl_ret %v12 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3390110
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C2: Bitvec w
C2
) %v0; %v3 := op:const (
C: Bitvec w
C
) %v0; %v4 := pair:%v2 %v3; %v5 := op:shl w %v4; %v6 := pair:%v1 %v5; %v7 := op:and w %v6; %v8 := op:const (
Y: Bitvec w
Y
) %v0; %v9 := pair:%v8 %v3; %v10 := op:shl w %v9; %v11 := pair:%v1 %v3; %v12 := op:lshr w %v11; %v13 := pair:%v12 %v2; %v14 := op:and w %v13; %v15 := pair:%v8 %v14; %v16 := op:xor w %v15; %v17 := pair:%v7 %v10; %v18 := op:xor w %v17 dsl_ret %v18 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 10 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 12 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 17 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 18 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), eval (Op.shl w) (eval (Op.xor w) (eval (Op.const Y) () id, eval (Op.and w) (eval (Op.lshr w) (eval (Op.const X) () id, eval (Op.const C) () id) id, eval (Op.const C2) () id) id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.xor w) (eval (Op.and w) (eval (Op.const X) () id, eval (Op.shl w) (eval (Op.const C2) () id, eval (Op.const C) () id) id) id, eval (Op.shl w) (eval (Op.const Y) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 10 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 12 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 17 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 18 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), (Y ^^^ X >>> C &&& C2) <<< C = X &&& C2 <<< C ^^^ Y <<< C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 10 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev Context.Var.last)) TSSA.rgn0) (TSSA.assign 4 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 5 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 10 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))) (TSSA.assign 12 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 17 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 18 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 458 -- precondition: true /- %s = ashr i31 %X, C %Op0 = sub %s, %Y %r = shl %Op0, C => %s2 = shl %Y, C %a = sub %X, %s2 %s = ashr i31 %X, C %Op0 = sub %s, %Y %r = and %a, (-1 << C) -/ theorem
alive_InstCombineShift__458: āˆ€ {c : Context BaseType} {e : EnvC c} (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
alive_InstCombineShift__458
: forall (
Y: Bitvec 31
Y
X: Bitvec 31
X
C: Bitvec 31
C
:
Bitvec: ā„• → Type
Bitvec
31: ?m.3469423
31
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3469418
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
31: ?m.3469446
31
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec 31
X
) %v0; %v2 := op:const (
C: Bitvec 31
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:ashr
31: ?m.3469884
31
%v3; %v5 := op:const (
Y: Bitvec 31
Y
) %v0; %v6 := pair:%v4 %v5; %v7 := op:sub
31: ?m.3470402
31
%v6; %v8 := pair:%v7 %v2; %v9 := op:shl
31: ?m.3470779
31
%v8 dsl_ret %v9 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3469418
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
31: ?m.3471194
31
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
Y: Bitvec 31
Y
) %v0; %v2 := op:const (
C: Bitvec 31
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
31: ?m.3471631
31
%v3; %v5 := op:const (
X: Bitvec 31
X
) %v0; %v6 := pair:%v5 %v4; %v7 := op:sub
31: ?m.3472149
31
%v6; %v8 := pair:%v5 %v2; %v9 := op:ashr
31: ?m.3472536
31
%v8; %v10 := pair:%v9 %v1; %v11 := op:sub
31: ?m.3472934
31
%v10; %v12 := op:const (-
1: ?m.3473242
1
) %v0; %v13 := pair:%v12 %v2; %v14 := op:shl
31: ?m.3473571
31
%v13; %v15 := pair:%v7 %v14; %v16 := op:and
31: ?m.3473967
31
%v15 dsl_ret %v16 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), eval (Op.shl 31) (eval (Op.sub 31) (eval (Op.ashr 31) (eval (Op.const X) () id, eval (Op.const C) () id) id, eval (Op.const Y) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.and 31) (eval (Op.sub 31) (eval (Op.const X) () id, eval (Op.shl 31) (eval (Op.const Y) () id, eval (Op.const C) () id) id) id, eval (Op.shl 31) (eval (Op.const (-1)) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), (sshr X (Bitvec.toNat C) - Y) <<< C = X - Y <<< C &&& (-1) <<< C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (Y X C : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev Context.Var.last)) (TSSA.assign 7 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.ashr 31) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 11 (TSSA.op (Op.sub 31) Context.Var.last TSSA.rgn0) (TSSA.assign 12 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))) (TSSA.assign 14 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) Context.Var.last) (TSSA.assign 16 (TSSA.op (Op.and 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 476 -- precondition: true /- %shr = lshr %X, C %s = and %shr, C2 %Op0 = or %s, %Y %r = shl %Op0, C => %s2 = shl %Y, C %a = and %X, (C2 << C) %shr = lshr %X, C %s = and %shr, C2 %Op0 = or %s, %Y %r = or %a, %s2 -/ theorem
alive_InstCombineShift__476: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (Y X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))))) (TSSA.assign 16 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 17 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))))) (TSSA.assign 18 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))) e
alive_InstCombineShift__476
: forall (w :
Nat: Type
Nat
) (
Y: Bitvec w
Y
X: Bitvec w
X
C: Bitvec w
C
C2: Bitvec w
C2
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3527148
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:lshr w %v3; %v5 := op:const (
C2: Bitvec w
C2
) %v0; %v6 := pair:%v4 %v5; %v7 := op:and w %v6; %v8 := op:const (
Y: Bitvec w
Y
) %v0; %v9 := pair:%v7 %v8; %v10 := op:or w %v9; %v11 := pair:%v10 %v2; %v12 := op:shl w %v11 dsl_ret %v12 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3527148
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
Y: Bitvec w
Y
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3; %v5 := op:const (
X: Bitvec w
X
) %v0; %v6 := op:const (
C2: Bitvec w
C2
) %v0; %v7 := pair:%v6 %v2; %v8 := op:shl w %v7; %v9 := pair:%v5 %v8; %v10 := op:and w %v9; %v11 := pair:%v5 %v2; %v12 := op:lshr w %v11; %v13 := pair:%v12 %v6; %v14 := op:and w %v13; %v15 := pair:%v14 %v1; %v16 := op:or w %v15; %v17 := pair:%v10 %v4; %v18 := op:or w %v17 dsl_ret %v18 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))))) (TSSA.assign 16 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 17 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))))) (TSSA.assign 18 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), eval (Op.shl w) (eval (Op.or w) (eval (Op.and w) (eval (Op.lshr w) (eval (Op.const X) () id, eval (Op.const C) () id) id, eval (Op.const C2) () id) id, eval (Op.const Y) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.or w) (eval (Op.and w) (eval (Op.const X) () id, eval (Op.shl w) (eval (Op.const C2) () id, eval (Op.const C) () id) id) id, eval (Op.shl w) (eval (Op.const Y) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))))) (TSSA.assign 16 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 17 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))))) (TSSA.assign 18 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), (X >>> C &&& C2 ||| Y) <<< C = X &&& C2 <<< C ||| Y <<< C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (Y X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.op (Op.const Y) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const Y) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const X) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) TSSA.rgn0) (TSSA.assign 7 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (TSSA.assign 8 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 9 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))) Context.Var.last) (TSSA.assign 10 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 11 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))) (TSSA.assign 12 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 13 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))) (TSSA.assign 14 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.assign 15 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))))))))))) (TSSA.assign 16 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.assign 17 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))))))))))) (TSSA.assign 18 (TSSA.op (Op.or w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))))))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 497 -- precondition: true /- %Op0 = xor %X, C2 %r = lshr %Op0, C => %s2 = lshr %X, C %Op0 = xor %X, C2 %r = xor %s2, (C2 u>> C) -/ theorem
alive_InstCombineShift__497: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_InstCombineShift__497
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C: Bitvec w
C
C2: Bitvec w
C2
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3606164
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C2: Bitvec w
C2
) %v0; %v3 := pair:%v1 %v2; %v4 := op:xor w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v4 %v5; %v7 := op:lshr w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3606164
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:lshr w %v3; %v5 := op:const (
C2: Bitvec w
C2
) %v0; %v6 := pair:%v1 %v5; %v7 := op:xor w %v6; %v8 := pair:%v5 %v2; %v9 := op:lshr w %v8; %v10 := pair:%v4 %v9; %v11 := op:xor w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), eval (Op.lshr w) (eval (Op.xor w) (eval (Op.const X) () id, eval (Op.const C2) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.xor w) (eval (Op.lshr w) (eval (Op.const X) () id, eval (Op.const C) () id) id, eval (Op.lshr w) (eval (Op.const C2) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), (X ^^^ C2) >>> C = X >>> C ^^^ C2 >>> C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.xor w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 497''' -- precondition: true /- %Op0 = add %X, C2 %r = shl %Op0, C => %s2 = shl %X, C %Op0 = add %X, C2 %r = add %s2, (C2 << C) -/ theorem
alive_InstCombineShift__497''': āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
alive_InstCombineShift__497'''
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C: Bitvec w
C
C2: Bitvec w
C2
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3651562
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C2: Bitvec w
C2
) %v0; %v3 := pair:%v1 %v2; %v4 := op:add w %v3; %v5 := op:const (
C: Bitvec w
C
) %v0; %v6 := pair:%v4 %v5; %v7 := op:shl w %v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3651562
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3; %v5 := op:const (
C2: Bitvec w
C2
) %v0; %v6 := pair:%v1 %v5; %v7 := op:add w %v6; %v8 := pair:%v5 %v2; %v9 := op:shl w %v8; %v10 := pair:%v4 %v9; %v11 := op:add w %v10 dsl_ret %v11 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), eval (Op.shl w) (eval (Op.add w) (eval (Op.const X) () id, eval (Op.const C2) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.add w) (eval (Op.shl w) (eval (Op.const X) () id, eval (Op.const C) () id) id, eval (Op.shl w) (eval (Op.const C2) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), (X + C2) <<< C = X <<< C + C2 <<< C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C C2 : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C2) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev Context.Var.last)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 10 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last))))) Context.Var.last) (TSSA.assign 11 (TSSA.op (Op.add w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 582 -- precondition: true /- %Op0 = shl %X, C %r = lshr %Op0, C => %Op0 = shl %X, C %r = and %X, (-1 u>> C) -/ theorem
alive_InstCombineShift__582: āˆ€ {c : Context BaseType} {e : EnvC c} (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_InstCombineShift__582
: forall (w :
Nat: Type
Nat
) (
X: Bitvec w
X
C: Bitvec w
C
:
Bitvec: ā„• → Type
Bitvec
w) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3696799
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3; %v5 := pair:%v4 %v2; %v6 := op:lshr w %v5 dsl_ret %v6 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3696799
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
w))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
X: Bitvec w
X
) %v0; %v2 := op:const (
C: Bitvec w
C
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl w %v3; %v5 := op:const (-
1: ?m.3698760
1
) %v0; %v6 := pair:%v5 %v2; %v7 := op:lshr w %v6; %v8 := pair:%v1 %v7; %v9 := op:and w %v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), eval (Op.lshr w) (eval (Op.shl w) (eval (Op.const X) () id, eval (Op.const C) () id) id, eval (Op.const C) () id) id āŠ‘ eval (Op.and w) (eval (Op.const X) () id, eval (Op.lshr w) (eval (Op.const (-1)) () id, eval (Op.const C) () id) id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), X <<< C >>> C = X &&& (-1) >>> C
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (w : ā„•) (X C : Bitvec w), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev Context.Var.last))) (TSSA.assign 6 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last)))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const X) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const C) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl w) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const (-1)) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) (TSSA.assign 7 (TSSA.op (Op.lshr w) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) Context.Var.last) (TSSA.assign 9 (TSSA.op (Op.and w) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™
-- Name:InstCombineShift: 724 -- precondition: true /- %Op0 = shl i31 C1, %A %r = shl %Op0, C2 => %Op0 = shl i31 C1, %A %r = shl (C1 << C2), %A -/ theorem
alive_InstCombineShift__724: āˆ€ {c : Context BaseType} {e : EnvC c} (A C2 C1 : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const A) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const A) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
alive_InstCombineShift__724
: forall (
A: Bitvec 31
A
C2: Bitvec 31
C2
C1: Bitvec 31
C1
:
Bitvec: ā„• → Type
Bitvec
31: ?m.3730898
31
) ,
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3730893
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
31: ?m.3730921
31
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
C1: Bitvec 31
C1
) %v0; %v2 := op:const (
A: Bitvec 31
A
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
31: ?m.3731359
31
%v3; %v5 := op:const (
C2: Bitvec 31
C2
) %v0; %v6 := pair:%v4 %v5; %v7 := op:shl
31: ?m.3731877
31
%v6 dsl_ret %v7 ] āŠ‘
TSSA.eval: {Op β : Type} → [inst : Goedel β] → [inst_1 : TypedUserSemantics Op β] → {Ī“ : Context β} → {i : TSSAIndex β} → TSSA Op Ī“ i → EnvC Ī“ → TSSAIndex.eval i
TSSA.eval
(Op :=
Op: Type
Op
) (e :=
e: ?m.3730893
e
) (i :=
TSSAIndex.STMT: {β : Type} → SSA.UserType β → TSSAIndex β
TSSAIndex.STMT
(
UserType.base: {β : Type} → β → SSA.UserType β
UserType.base
(
BaseType.bitvec: ā„• → BaseType
BaseType.bitvec
31: ?m.3732292
31
))) [dsl_bb| ^bb %v0 := unit: ; %v1 := op:const (
C1: Bitvec 31
C1
) %v0; %v2 := op:const (
A: Bitvec 31
A
) %v0; %v3 := pair:%v1 %v2; %v4 := op:shl
31: ?m.3732729
31
%v3; %v5 := op:const (
C2: Bitvec 31
C2
) %v0; %v6 := pair:%v1 %v5; %v7 := op:shl
31: ?m.3733262
31
%v6; %v8 := pair:%v7 %v2; %v9 := op:shl
31: ?m.3733645
31
%v8 dsl_ret %v9 ] :=

Goals accomplished! šŸ™
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (A C2 C1 : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const A) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const A) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (A C2 C1 : Bitvec 31), eval (Op.shl 31) (eval (Op.shl 31) (eval (Op.const C1) () id, eval (Op.const A) () id) id, eval (Op.const C2) () id) id āŠ‘ eval (Op.shl 31) (eval (Op.shl 31) (eval (Op.const C1) () id, eval (Op.const C2) () id) id, eval (Op.const A) () id) id
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (A C2 C1 : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const A) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const A) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (A C2 C1 : Bitvec 31), C1 <<< A <<< C2 = C1 <<< C2 <<< A
cāœ: Context BaseType

e: EnvC cāœ


āˆ€ (A C2 C1 : Bitvec 31), TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const A) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))) e āŠ‘ TSSA.eval (TSSA.assign 0 TSSA.unit (TSSA.assign 1 (TSSA.op (Op.const C1) Context.Var.last TSSA.rgn0) (TSSA.assign 2 (TSSA.op (Op.const A) (Context.Var.prev Context.Var.last) TSSA.rgn0) (TSSA.assign 3 (TSSA.pair (Context.Var.prev Context.Var.last) Context.Var.last) (TSSA.assign 4 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 5 (TSSA.op (Op.const C2) (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) TSSA.rgn0) (TSSA.assign 6 (TSSA.pair (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))) Context.Var.last) (TSSA.assign 7 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.assign 8 (TSSA.pair Context.Var.last (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev (Context.Var.prev Context.Var.last)))))) (TSSA.assign 9 (TSSA.op (Op.shl 31) Context.Var.last TSSA.rgn0) (TSSA.ret Context.Var.last))))))))))) e

Goals accomplished! šŸ™